0%

hadoop-单节点伪分布式搭建

在mac上搭建hadoop伪分布式

操作系统: macOS Mojave 10.14.5

JDK : 1.8

hadoop: 2.7.7

1. Java和Hadoop安装

下载和安装相信都没问题

注意的就是:

  • 环境变量设置好,我是mac所以javahome是$(/usr/libexec/java_home);我是zsh所以修改.zshrc,修改完别忘了source。
#JAVA_HOME
export JAVA_HOME=$(/usr/libexec/java_home)
export PATH=$JAVA_HOME/bin:$PATH
#HADOOP_HOME
export HADOOP_HOME=/usr/local/hadoop-2.7.7
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
  • 由于我将hadoop放在/usr/local/目录下,所以需要更改hadoop文件夹权限
sudo chown -R zxy:admin /usr/local/hadoop-2.7.7

2. 配置SSH

ssh-keygen -t rsa -P ""
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
# 测试
ssh localhost

3. 伪分布式配置

core-site.xml

修改 /usr/local/hadoop-2.7.7/etc/hadoop/core-site.xml

<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop-2.7.7/data/tmp</value>
</property>
</configuration>
  • fs.defaultFS HDFS 的NameNode地址

  • hadoop.tmp.dir hadoop 临时文件地址,自己指定

hdfs-site.xml

修改 /usr/local/hadoop-2.7.7/etc/hadoop/hdfs-site.xml

<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
  • dfs.replication HDFS文件存储的副本个数,默认3。因为我们这只有一个节点,所以设置1.(单一节点至多存一份节点)

yarn-site.xml

修改 /usr/local/hadoop-2.7.7/etc/hadoop/yarn-site.xml

<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>localhost</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 开启聚合日志 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log.server.url</name>
<value>http://localhost:19888/jobhistory/logs</value>
</property>
</configuration>
  • arn.log-aggregation-enable 开启日志聚合
  • yarn.resourcemanager.hostname yarn的ResourceManager地址

mapred-site.xml

修改 /usr/local/hadoop-2.7.7/etc/hadoop/mapred-site.xml

<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>localhost:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>localhost:19888</value>
</property>
</configuration>
  • mapreduce.framework.name 采用yarn管理MR
  • mapreduce.jobhistory.address 历史服务器端口地址
  • mapreduce.jobhistory.webapp.address 历史服务器web端地址

检查JAVA_HOME

hadoop-env.shmapred-env.shyarn-env.sh,在这三个文件检查是否添加JAVA_HOME路径,如下:

export JAVA_HOME=$JAVA_HOME

4. 使用

  • 开HDFS

第一次使用要格式化(仅限第一次使用时,以后要格式化需删除log、data目录下的文件)

hadoop namenode -format

开启namenode、datanode

hadoop-daemon.sh start namenode
hadoop-daemon.sh start datanode
  • 开yarn
yarn-daemon.sh start resourcemanager
yarn-daemon.sh start nodemanager
  • 开historyserver
mr-jobhistory-daemon.sh start historyserver
  • 可以用jps查看效果
jps
35953 JobHistoryServer
32930
35682 NodeManager
35990 Jps
35559 DataNode
35624 ResourceManager
35502 NameNode
  • 测试

创建一个文件夹zxytest,里面随便放一个文件,上传到hdfs测试wordcount

hdfs dfs -put zxytest /
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /zxytest /zxyout
  • 关闭
mr-jobhistory-daemon.sh stop historyserver
yarn-daemon.sh stop resourcemanager
yarn-daemon.sh stop nodemanager
hadoop-daemon.sh stop namenode
hadoop-daemon.sh stop datanode
  • 可视化地址

所有任务: http://localhost:8088/

DataNode: http://localhost:50070/

历史服务器: http://localhost:19888/

更新

由于新版可以在UI界面直接处理文件夹,所以我把版本升到3.2.1~

但是在网页界面访问数据使用的用户名,默认值是一个不真实存在的用户(dr.who),此用户权限很小,不能访问不同用户的数据,这保证了数据安全。为了方便,我选择修改 core-site.xml,改为自己的用户名,这样就能直接增删改了~

<property>
<name>hadoop.http.staticuser.user</name>
<value>zxy</value>
</property>