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.pubid_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的原因及解决办法

相关推荐