Hadoop环境搭建

标签: 大数据 分类: 大数据 创建时间:2019-12-28 01:55:49 更新时间:2023-10-20 11:23:25

前言

参考文章:
1.大数据开发入门之hadoop单机版部署 这个我觉得比我写的调理要清楚,结合这篇文章,可以搭建单机版的。
2.Centos8安装 Hadoop3 详细操作(含图文)
3.Hadoop默认端口说明

关于用户和用户组

因为我使用的是虚拟机的方式安装的hadoop程序,所以一般都是直接以root方式登录了,但是在安装的时候,很多的文章就是建议创建一个单独的hadoop用户,使用这个用户进行安装和配置hadoop。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
## 创建用户组 groupadd 选项 用户组
groupadd hadoop

## # 创建新用户hadoop,并使用 /bin/bash 作为shell:useradd -m hadoop -s /bin/bash
useradd -g hadoop hadoop

## 给hadoop设置密码
passwd hadoop

## 将用户添加到hadoop组
usermod -G hadoop hadoop

## 切换用户
su hadoop

## 增加管理权限
visudo
## 找到 root ALL=(ALL) ALL 这行,在这行下面增加一行内容:
hadoop ALL=(ALL) ALL

参考文章:
1.设置Hadoop的执行用户 可以在/etc/profile 配置文件中, 添加如下代码: export HADOOP_USER_NAME=hdfs
2.linux怎么创建新用户和设置密码
3.Linux 用户和用户组管理

1.关闭防火墙

1
2
systemctl stop firewalld    #临时关闭
systemctl disable firewalld #禁止开机启动

2.安装JDK

主要步骤:为下载->解压->配置/etc/profile环境目录->source /etc/profile生效

1
2
3
4
export JAVA_HOME=/usr/java/jdk1.8.0_201
export JRE_HOME=/usr/java/jdk1.8.0_201/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

3.ssh-keyen生成密钥

主要步骤:安装openssh-server->使用ssh-keygen生成密钥->将生成的id_rsa.pub中的内容添加到authorized_keys(三台内容一样,都包含其他两台的ip_rsa.pub内容)

1
2
3
4
5
6
## -C 备注,-t 类型
ssh-keygen -t rsa -C "hadoop01"
## 添加到authorized_keys文件中,将id_rsa.pub中的内容,拷贝到authorized_keys中
~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
## 设置权限
chmod 644 ~/.ssh/authorized_keys

验证:ssh root@hadoop02,出现登录成功就可以了。

3.下载hadoop压缩包到服务器解压

下载相应版本的hadoop, 新建hadoop目录-> 解压hadoop压缩包-> 配置hadoop环境变量-> 验证安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
## 新建目录
mkdir -p /usr/local/hadoop
## 解压
tar -zxf hadoop-3.1.1.tar.gz -C /usr/local/hadoop/
## 配置环境变量
vi /etc/profile
#在配置文件最后一行添加如下配置
export HADOOP_HOME=/usr/local/hadoop/hadoop-3.1.1
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

## 重载配置文件
source /etc/profile

## 验证安装
hadoop version

4.新建相关数据目录

1
2
3
4
5
6
7
#在/usr/local/hadoop目录下创建目录
cd /usr/local/hadoop/
mkdir tmp
mkdir var
mkdir hdfs
mkdir hdfs/name
mkdir hdfs/data

5.配置hadoop

主要配置以下内容/etc/hosts内容,以及/usr/local/hadoop/hadoop-3.1.1/etc/hadoop目录下的workers、hadoop-env.sh、core-site.xml、hdfs-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
## (1) 编辑/etc/hosts
vi /etc/hosts
## 添加
192.168.1.33 hadoop01
192.168.1.34 hadoop02
192.168.1.35 hadoop03

## (2) 进入hadoop配置文件路径
cd /usr/local/hadoop/hadoop-3.1.1/etc/hadoop
## (3) 编辑workers
vi workers
##删除localhost
##添加从节点主机名,例如我这里是:
hadoop02
hadoop03

## (4) 编辑hadoop-env.sh
vi hadoop-env.sh
## 在JAVA_HOME=/usr/java/testing hdfs dfs -ls一行下面添加如下代码
export JAVA_HOME=/usr/java/jdk1.8.0_65
export HADOOP_HOME=/usr/local/hadoop/hadoop-3.1.1
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
## 以下配置在各个文件的<configuration></configuration>中添加,其中的ip地址根据自己的实际情况填写
## (5) core-site.xml
vi core-site.xml
## core-site添加内容如下:
<property>
<name>fs.defaultFS</name>
<value>hdfs://192.168.1.33:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value>
</property>

## (6) hdfs-site.xml
vi hdfs-site.xml
## hdfs-site内容如下
<property>
<name>dfs.name.dir</name>
<value>/usr/local/hadoop/dfs/name</value>
<description>Path on the local filesystem where theNameNode stores the namespace and transactions logs persistently.</description>
</property>
<property>
<name>dfs.data.dir</name>
<value>/usr/local/hadoop/dfs/data</value>
<description>Comma separated list of paths on the localfilesystem of a DataNode where it should store its blocks.</description>
</property>
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop01:50070</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop01:50090</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
<description>need not permissions</description>
</property>
## (7) yarn-site.xml
## 执行,复制输出内容
hadoop classpath
## 编辑yarn-site.xml
vi yarn-site.xml

## 内容

<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop01</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.application.classpath</name>
<value>输入刚才返回的Hadoop classpath路径</value>
</property>

## 其他内容
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>hadoop01:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>hadoop01:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>hadoop01:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>hadoop01:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>hadoop01:8088</value>
</property>

## (8) mapred-site.xml
vi mapred-site.xml
## 内容
<property>
<name>mapred.job.tracker</name>
<value>hadoop01:49001</value>
</property>
<property>
<name>mapred.local.dir</name>
<value>/usr/local/hadoop/var</value>
</property>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>

6.同步配置文件

根据自己的情况,将主节点上的配置文件,同步复制到相应的从节点上,比如我这里,就不用复制java环境,我的/etc/profile文件也是通过复制相关的hadoop配置实现的。然后在从节点上使用: source /etc/profile 重新加载配置文件

1
2
3
4
5
6
7
scp -r /usr/local/java hadoop02:/usr/local/java
scp -r /usr/local/hadoop hadoop02:/usr/local/hadoop
scp -r /etc/profile hadoop02:/etc/

scp -r /usr/local/java hadoop03:/usr/local/java
scp -r /usr/local/hadoop hadoop03:/usr/local/hadoop
scp -r /etc/profile hadoop03:/etc/

7.格式化

在主节点上执行格式化,运行之后不报错,并在倒数第五六行有successfully即为格式化节点成功。

1
hdfs namenode -format

8.启动集群

使用下面的命令启动hadoop集群,或者是在hadoop安装目录sbin下执行。

1
start-all.sh

主节点:

从节点:

问题汇总

(1) http 9000端口无法使用
在浏览器中输入192.168.1.33:9000,发现打不开9000网页,而使用192.168.1.33:50070就可以打开dfshealth监控网站

使用命令:netstat -tpnl,可以查看9000端口是打开的。

(2) WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable

进入hadoop的sbin目录,启动start-dfs.sh出现如下警告,或者是运行:hadoop fs -ls /,start-all.sh等命令,都会出现这个错误:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable。

1
2
3
4
5
6
7
## 关闭hadoop集群
stop-all.sh
## 将日志输出到控制台
export HADOOP_ROOT_LOGGER=DEBUG,console
## 重新启动集群
start-all.sh

发现了如下错误:GLIBC_2.14’ not found (required by /usr/local/hadoop/hadoop-3.2.1/lib/native/libhadoop.so.1.0.0)

更新
经过艰苦的探索,终于在centos6.5 64位虚拟机上编译成功了hadoop-3.2.1(Hadoop编译安装),然后:

Check hadoop-dist/target/hadoop-2.4.0.tar.gz (e.g., use this as your hadoop binary) or hadoop-dist/target/hadoop-2.4.0. If you have already installed a 32bit Hadoop, then you need only to replace the native libs in $HADOOP/lib/ with the new native libs (hadoop-dist/target/hadoop-2.4.0/lib) and remove (if applicable) from $HADOOP/etc/hadoop-env.sh:

1
2
export HADOOP_COMMON_LIB_NATIVE_DIR="~/hadoop/lib/"
export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=~/hadoop/lib/"

将编译好的hadoop-dist/target/hadoop-3.2.1/lib中的lib替换掉安装的$HADOOP/lib/,删除/usr/local/hadoop/hadoop-3.1.1/etc/hadoop/hadoop-env.sh中的以上代码(如果有的话)。

小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。