伪分布环境
特点:(1)在单机上模拟一个分布式环境
HDFS:NameNode、DataNode、SecondaryNameNode
Yarn:ResourceManager、NodeManager
(2)具备Hadoop的所有功能
(3)用于开发和测试
注意:伪分布模式和全分布模式,需要设置以下环境变量(运行的用户):
export HDFS_DATANODE_USER=root
export HDFS_DATANODE_SECURE_USER=root
export HDFS_NAMENODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
在配置文件中把hadoop的sbin文件也配置到path路径下,这样启动的时候直接执行start-all.sh命令即可
在用户变量文件下设置这几个变量并使它生效:source ~/.bash_profile
然后再配置几个配置文件,hdfs-site.xml core-site.xml mapred-site.xml yarn-site.xml
hdfs-site.xml
<!--配置数据块的冗余度-->
<!--默认是3-->
<!--一般来说数据块的冗余度跟数据节点个数一致-->
<!--但最大不超过3-->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<!--默认true-->
<!--禁用了HDFS的权限检查功能-->
这个参数先不配置
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
core-site.xml
<!--配置NameNode地址-->
<!--9000是RPC通信的端口-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://bigdata111:9000</value>
</property>
<!--HDFS对应的操作系统目录-->
<!--一定要改默认值是Linux的tmp目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/root/training/hadoop-3.1.2/tmp</value>
</property>
mapred-site.xml
<!--MR运行的框架-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
yarn-site.xml
<!--配置ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>bigdata111</value>
</property>
<!--MR运行的方式是Shuffle-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
需要注意的是配置hdfs的操作目录的时候这个目录可以事先不存在,这个目录表示的是hdfs存储目录以及元信息日志等目录
当我们执行namenode初始化的时候,这个实现不存在的目录就给你格式并创建好了
对NameNode进行格式化
hdfs namenode -format
日志:Storage directory /root/training/hadoop-3.1.2/tmp/dfs/name
has been successfully formatted.
然后使用start-all.sh启动一下hadoop,然后我们会发现有个报错
这个是因为我们没有配免密码登陆,然后我需要配置一下免密码登陆
A登陆B就A生成公钥和私钥
那么我们现在只在一台机器上,就在当台机器上执行ssh-keygen -t rsa,然后一路回车即可
然后需要我们把公钥上传到当对方服务器,因为咱们是伪分布所以传到当台机器即可,在copy的过程需要输入一次对方服务器密码
authorrized_keys 就是B服务器会生成的文件
然后我们就可以用ssh登录到B服务器上,因为我们是伪分布所以就直接登录当台机器就可以了
接下来我们就测试一下伪分布hadoop,因为我们伪分布hadoop以及包含了hdfs和yarn,所以我们可以在hdfs中创建文件夹上传文件,并且可以在yarn平台运行mapreduce程序
我们创建一个文件夹在hdfs上,前提需要启动一下hadoop,因为我没有启动就创建了所以报了一个错
mkdir: Call From bigdata111/192.168.112.111 to bigdata111:9000 failed on connection exception: java.net.ConnectException: 拒绝连接; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused
说是hadoop的mkdir的命令在调用的时候被拒绝了一个
然后我启动一下执行start-all.sh
启动成功并且可以正常创建文件
然后我们就把本地一个文件上传上去
hdfs dfs -put temp/input/data.txt /input
hdfs dfs -ls /input
然后我们就测试一个wordcount的程序
hadoop jar hadoop-mapreduce-examples-3.1.2.jar wordcount /input/data.txt /output/wc
[root@bigdata111 mapreduce]# hdfs dfs -cat /output/wc/part-r-00000
Beijing 2
I 2
captial 1
china 2
is 1
love 2
of 1
the 1
[root@bigdata111 mapreduce]#
这样我们的伪分布环境已经搭建完毕,并且已经可以正常的运行了