版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lu__peng/article/details/78577221
刚刚开始学习Hadoop,遇到了一些问题,记录下来
一 搭建Hadoop开发环境
需要配置./conf/目录下的几个主要文件:core-site.xml,mapred-site.xml,hdfs-site.xml,hadoop-env.sh
1). 修改core-site.xml:
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
2). 修改mapred-site.xml:
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
</configuration>
3). 修改hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
4). 在hadoop-env.sh 添加JAVA_HOME
export JAVA_HOME=jdk目录
二 格式化以及遇到的问题
1)格式化Hadoop的文件系统HDFS,在Hadoop目录下,输入命令
bin/hadoop namenode -format
2)启动Hadoop
输入命令:
bin/start-all.sh
该命令启动Hadoop所需的所有进程,启动成功后,输入jps命令可以看到如下界面
17379 DataNode
18456 Jps
17800 TaskTracker
17178 NameNode
17547 SecondaryNameNode
17647 JobTracker
3)启动时遇到的问题:
没有启动DataNode进程,查看日志如下:
2017-11-19 20:50:36,804 WARN org.apache.hadoop.metrics2.impl.MetricsSystemImpl: Source name ugi already exists!
2017-11-19 20:50:37,294 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Incompatible namespaceIDs in /tmp/hadoop-lupeng/dfs/data: namenode namespaceID = 122682590; datanode namespaceID = 1193264756
at org.apache.hadoop.hdfs.server.datanode.DataStorage.doTransition(DataStorage.java:232)
at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:147)
at org.apache.hadoop.hdfs.server.datanode.DataNode.startDataNode(DataNode.java:414)
at org.apache.hadoop.hdfs.server.datanode.DataNode.<init>(DataNode.java:321)
at org.apache.hadoop.hdfs.server.datanode.DataNode.makeInstance(DataNode.java:1712)
at org.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(DataNode.java:1651)
at org.apache.hadoop.hdfs.server.datanode.DataNode.createDataNode(DataNode.java:1669)
at org.apache.hadoop.hdfs.server.datanode.DataNode.secureMain(DataNode.java:1795)
at org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:1812)
这是因为,我在搭建Hadoop环境时,多次进行了格式化bin/hadoop namenode -format命令,解决办法是:删除/tmp/hadoop-username/dfs/data/目录下的所有文件。
没有启动TaskTracekerj进程,查看日志如下:
2017-11-19 20:50:41,737 ERROR org.apache.hadoop.mapred.TaskTracker: Can not start task tracker because java.net.BindException: 地址已在使用
at sun.nio.ch.Net.bind0(Native Method)
at sun.nio.ch.Net.bind(Net.java:433)
at sun.nio.ch.Net.bind(Net.java:425)
at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
at org.mortbay.jetty.nio.SelectChannelConnector.open(SelectChannelConnector.java:216)
at org.apache.hadoop.http.HttpServer.start(HttpServer.java:602)
at org.apache.hadoop.mapred.TaskTracker.<init>(TaskTracker.java:1616)
at org.apache.hadoop.mapred.TaskTracker.main(TaskTracker.java:3937)
这是因为,上次关闭Hadoop时,一些进程没有停止,解决办法是:停掉Hadoop,找到没有正常关闭的进程利用kill指令停止目标进程:
ps -aux | grep "hadoop"
kill -9 process_ID