Hadoop系列(一)Hadoop安装配置及问题解决
Hadoop使用版本是2.7.5
, Mac系统。
一. 配置:
1)ssh环境配置:
首先检查ssh localhost
是否可以正常连接。如果提示错误,先在系统偏好设置->共享
中勾选远程登录
,再次输入ssh localhost
进行验证
2)ssh免密登录配置:
执行命令:ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
,ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
,
然后将生成的id_dsa.pub
和id_rsa.pub
追加到authorized_keys
中:cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod og-wx ~/.ssh/authorized_keys
,然后测试ssh localhost
是否可以免密连接。
3)配置hadoop环境变量
在~/.bash_profile中添加环境变量如下:export JAVA_HOME=$(/usr/libexec/java_home)
export HADOOP_INSTALL=/Users/nasuf/Project/hadoop-2.7.5
并将$HADOOP_INSTALL/bin
和$HADOOP_INSTALL/sbin
添加到$PATH
中:export PATH=$JAVA_HOME/bin:$HADOOP_INSTALL/bin:$HADOOP_INSTALL/sbin
配置完成后执行source ~/.bash_profile
生效
4)配置hadoop-env.sh
在${HADOOP_INSTALL}/etc/hadoop
目录下找到hadoop-env.sh
文件,确认以下参数注释已经打开:export JAVA_HOME=${JAVA_HOME}
export HADOOP_HEAPSIZE=2000
export HADOOP_OPTS="$HADOOP_OPTS -Djava.net.preferIPv4Stack=true"
5)配置core-site.xml
<configuration> <property> <name>fs.default.name</name> <value>hdfs://localhost:8020</value> </property> </configuration>
6)配置hdfs-site.xml
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration>
7)配置mapred-site.xml
cp mapred-site.xml.template mapred-site.xml
内容:
<configuration> <property> <name>mapred.job.tracker</name> <value>hdfs://localhost:9001</value> </property> </configuration>
二. 格式化namenode
hadoop namenode -format
三. 启动hadoop
在${HADOOP_INSTALL}/sbin
路径下执行:start-dfs.sh
执行完毕后输入jps
查看进程情况如下:
25361 NodeManager 25139 SecondaryNameNode 28662 Jps 25030 DataNode 15386 24940 NameNode
说明hadoop启动成功
可以在浏览器中访问http://localhost:8088/
和http://localhost:50070/
四. 问题总结
1) namenode
未启动成功
在初次执行start-dfs.sh
前应先格式化namenode
: hadoop namenode -format
2) datanode
未启动成功
多次执行namenode
格式化,会在namenode
数据文件夹(即配置文件中dfs.name.dir在本地系统的路径)中保存一个current/VERSION文件,记录namespaceID,标识了所格式化的namenode的版本。如果我们频繁的格式化namenode,那么datanode中保存(即配置文件中dfs.data.dir在本地系统的路径)的current/VERSION文件(路径为usr/local/hadoop/tmp/dfs/data/current/VERSION)只是你第一次格式化时保存的namenode的ID,因此就会造成namdenode 的 namespaceID 与 datanode的namespaceID 不一致,从而导致namenode和 datanode的断连。
解决:
把/tmp下的Hadoop开关的临时文件删除
把/hadoop.tmp.dir目录清空
3) Incorrect configuration: namenode address dfs.namenode.servicerpc-address or dfs.namenode.rpc-address is not configured.
导致这个问题的可能原因是: 机器名不能包括下划线_
4)Mac下运行hadoop程序可能导致的异常:Exception in thread "main" java.io.IOException: Mkdirs failed to create /some/path
参考stackoverflow的这个问题可以解决
我的解决方法是在pom.xml
中添加:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>2.0</version> <configuration> <shadedArtifactAttached>true</shadedArtifactAttached> </configuration> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <filters> <filter> <artifact>*:*</artifact> <excludes> <exclude>META-INF/*.SF</exclude> <exclude>META-INF/*.DSA</exclude> <exclude>META-INF/*.RSA</exclude> <exclude>META-INF/LICENSE*</exclude> <exclude>license/*</exclude> </excludes> </filter> </filters> </configuration> </execution> </executions> </plugin>
参考文章:
Hadoop - Mac OSX下配置和启动hadoop以及常见错误解决
hadoop伪分布式下 无法启动datanode的原因及解决办法