公司因为业务需求使用Hbase存储和分析数据。在mac上搭建hadoop伪分布式,记录过程如下。
准备工作:
- 安装brew
- 安装java开发环境
1. 安装
brew install hadoop
hadoop version # 查看安装版本, 目前默认安装版本是 3.0.0
2. 配置
进入配置目录
cd /usr/local/Cellar/hadoop/3.0.0/libexec/etc/hadoop # hadoop 配置目录
hadoop-env.sh
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home
– 指定JAVA 环境变量 (查看java路径: /usr/libexec/java_home)core-site.sh
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/Users/max/tmp/hadoop</value> ## 自定义文件夹
</property>
</configuration>
- hdfs-site
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
3. 配置ssh
sudo scutil --set HostName localhost # 设置HostName
sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist #启动sshd服务
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys #如果没有公私钥对需要先生成: ssh-keygen -t rsa -P ""
ssh localhost #显示:Last login: xxx, 配置成功
4. 启动hadoop
cd /usr/local/Cellar/hadoop/3.0.0/libexec
hdfs namenode -format # 格式化文件系统
start-all.sh (= start-dfs.sh + start-yarn.sh) # 启动
jps # 查看hadoop的运行情况, 看到如下信息
2611 Jps
1107 DataNode
1027 NameNode
1331 ResourceManager
1219 SecondaryNameNode
1415 NodeManager
访问 http://localhost:9870 测试是否正常
stop-all.sh (= stop-dfs.sh + stop-yarn.sh) # 停止
更多关于Hadoop、MapReduce、YARN和Spark的区别与联系,可以参考链接
http://blog.csdn.net/leijie0322/article/details/44343887
5. 使用
hdfs dfs -mkdir input # 创建输入目录
hdfs dfs -put etc/hadoop/*.xml input # 复制文件进入输入目录
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.0.0.jar grep input output 'dfs[a-z.]+' # 运行 map-reduce 例子
hdfs dfs -cat output/* # 查看输出结果
6. 遇到的问题
namenode 格式化后, datanode/namenode 启动不了
原因:
系统启动后会默认读取linux根目录下的tmp/hadoop-hadoop/下的文件。
如果系统没有重启,这个目录不会被系统清理掉,保存了namenode和datanode相关信息。
这样下次启动hadoop时(不论是重新格式化hdfs文件系统,还是其他操作),hadoop还是会读取hadoop.tmp.dir配置路径下的文件作为namenode、datanode的配置信息。
重新格式化时,namenode会重新生成,但保存配置信息不会重新生成。
导致两个cluster-ID冲突,启动失败。解决方法:
- 方法1:在core-site.xml,hdfs-site.xml文件中,设置namenode和datanode配置文件的位置, 配置方法见参考链接2。
- 方法2:系统开机后,只执行一次format操作。(如果不小心format了,则可以先删除配置文件夹,然后在执行format等启动hadoop操作)