Hadoop有三种模式
- Local (Standalone) Mode
- Pseudo-Distributed Mode (伪分布模式)
- Fully-Distributed Mode (完全分布模式)
一、Pseudo-Distributed Mode (伪分布模式)搭建
注意事项:
- 配置节点时,避免使用ip地址,改用对应的host name,官方也建议这样做(好像使用ip有bug)
1、搭建前准备
- 安装JDK,配置环境变量
- 安装ssh,设置免登陆
- 检查 /etc/hosts 文件配置无误(确保使用hostname时能正常通讯)
- 检查 /etc/sysconfig/network 的HOSTNAME与上一条的是否一致
如下所示,hostname都为node02
[root@node02 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.9.12 node02
[root@node02 ~]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=node02
设置ssh登录免秘钥,生成了 id_dsa(私钥)和 id_dsa.pub(公钥)两个秘钥。
[root@node02 ~]# ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
[root@node02 ~]# ll .ssh/
total 16
-rw-------. 1 root root 668 Jun 11 19:28 id_dsa
-rw-r--r--. 1 root root 601 Jun 11 19:28 id_dsa.pub
-rw-r--r--. 1 root root 1574 Jun 11 19:32 known_hosts
#当对方机器上持有自己的公钥时,就能ssh免登录对方的机器机器,登陆自身免密执行如下命令
[root@node02 .ssh]# cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
2、安装hadoop,进行简单配置
- 我是用的是hadoop2.6.5这个版本,主要是方便和spark使用。
(1)解压
[root@node02 ~]# tar -zxvf hadoop-2.6.5.tar.gz
(2)解压后就可以使用了,为了方便管理,拷贝hadoop目录至其他目录
[root@node02 ~]# mv hadoop-2.6.5 /opt
(3)配置hadoop的环境变量,如下(配置完后记得刷新生效)
[root@node02 ~]# tail -3 /etc/profile
export JAVA_HOME=/usr/java/jdk1.8.0_171-amd64
export HADOOP_HOME=/opt/hadoop-2.6.5
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
(4)修改 hadoop 配置文件,在-env.sh 文件中配置JAVA_HOME,因为通过ssh远程调hadoop、java命令时,linux系统不会读取/etc/profile文件,所以取不到 JAVA_HOME
[root@node02 hadoop]# cd /opt/hadoop-2.6.5/etc/hadoop/
#以下 3 个文件中修改或添加 export JAVA_HOME=/usr/java/jdk1.8.0_171-amd64
[root@node02 hadoop]# vi hadoop-env.sh
[root@node02 hadoop]# vi mapred-env.sh
[root@node02 hadoop]# vi yarn-env.sh
3、配置hadoop,规划节点
(1)修改 hadoop-2.6.5/etc/hadoop 目录下的三个文件
- core-site.xml
- hdfs-site.xml
- slaves
core-site.xml 简单配置
[root@node02 hadoop]# vim core-site.xml
<configuration>
<!--设置 NameNode 所在节点的访问入口-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://node02:9000</value>
</property>
<!--设置 hadoop 存放数据的临时目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/var/wjx/hadoop/pseudo</value>
</property>
</configuration>
注意: Hadoop 默认把数据块的元数据和数据存放在操作系统的/tmp 目录下,但操作系统的/tmp 目录达到系统阈值会自动清空,所以要做修改。根据下表的描述,只要配置hadoop.tmp.dir就行,后面两个自动引用hadoop.tmp.dir配置的地址。实际使用可能需要进行分别配置,以便于管理。
name | value |
hadoop.tmp.dir | /tmp/hadoop-${user.name} |
dfs.namenode.name.dir | file://${hadoop.tmp.dir}/dfs/name |
dfs.datanode.data.dir | file://${hadoop.tmp.dir}/dfs/data |
hdfs-site.xml 简单配置
[root@node02 hadoop]# vim hdfs-site.xml
<configuration>
<!--设置block块的副本数,注意不能超过节点数-->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<!—设置 SecondaryNameNode 在哪个节点,hadoop2.X后不再有SNN-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node02:50090</value>
</property>
</configuration>
slaves 配置DataNode节点
[root@node02 hadoop]# vim slaves
node02
(2)格式化NameNode
[root@node02 hadoop]# hdfs namenode –format
#成功信息:
Storage directory /var/wjx/hadoop/pseudo/dfs/name has been successfully formatted.
(3)启动hdfs系统,查看进程是否启动成功
[root@node02 ~]# start-dfs.sh
Starting namenodes on [node02]
node02: starting namenode, logging to /opt/hadoop-2.6.5/logs/hadoop-root-namenode-node02.out
node02: starting datanode, logging to /opt/hadoop-2.6.5/logs/hadoop-root-datanode-node02.out
Starting secondary namenodes [node02]
node02: starting secondarynamenode, logging to /opt/hadoop-2.6.5/logs/hadoop-root-secondarynamenode-no
de02.out[root@node02 ~]# jps
1427 Bootstrap
3319 NameNode
3592 SecondaryNameNode
3436 DataNode
3709 Jps
[root@node02 current]# cd /var/wjx/hadoop/pseudo/dfs/data/current
[root@node02 current]# vi VERSION
#Wed Jun 12 08:32:52 CST 2019
storageID=DS-4fd6b46c-6567-4875-9dcf-17577873d372
#与 name 下的 VERSION 中的 clusterID 相同,否则 NN 与 DN 不会通信
clusterID=CID-e2d83b00-0c46-45b2-9f86-e824c42795e8
cTime=0
datanodeUuid=e18d8595-35b6-40b3-9dde-abc56f90c77b
storageType=DATA_NODE
layoutVersion=-56
(4)输入地址验证 http://node02:50070 至此,伪分布模式搭建完成
(5)给hdfs创建目录,p表示多层目录,user类似于linux的home目录
[root@node02 ~]# hdfs dfs -mkdir -p /user/root
(6)上传文件,如果
[root@node02 ~]# hdfs dfs -put hadoop-2.6.5.tar.gz /user/root
(7)按设置的block块大小上传文件,D表示使用属性,dfs.blocksize为属性名表示block块大小(单位Byte)
[root@node02 ~]# hdfs dfs -D dfs.blocksize=1048576 filetest.txt
[root@node02 ~]# hdfs dfs -D dfs.blocksize=1048576 -put filetest.txt /tmp
未完待续