本来准备自己写一个 测试程序,弄成jarbao
,运行一下,但是目前水平有限,写了一般 ,写不出来了,还有待继续学习,先转一片文章,帮我解决了不少问题
原文地址: http://www.cnblogs.com/itgg168/archive/2012/11/24.html
最近在学习hadoop,从一个不知hadoop,大数据,云计算为何物的人,突然间要去研究,一时难以适应,悔恨自己以前算法,数据结构,Java基础,linux怎么都没好好学呢,却偏偏都要用到,真是“书到用时方恨少啊!”
不过,悔恨解决不了问题,事情出了最好能冷静下来取分析当前的情况,并根据当前的情况作出最好的安排,不可否认,移动,大数据,云服务即将成为未来IT业发展的主流,学习hadoop进行大规模数据处理符合当今发展的潮流,所以,我必须花费更多的努力,将必备的知识学好,好好的武装自己。
问题一
# hadoop fs -ls时出现错误如下:
# hadoop fs -ls
11/08/31 22:51:39 INFO ipc.Client: Retrying connect to server: localhost/127.0.0.1:8020. Already tried 0 time(s).
Bad connection to FS. command aborted.
解决方案:
1. 格式化namenode:
# hadoop namenode -format
2. 重新启动hadoop
# sh stop-all.sh
# sh start-all.sh
3. 查看后台进程
# jps
13508 NameNode
11008 SecondaryNameNode
14393 Jps
11096 JobTracker
此时namenode启动
4. 运行
# hadoop fs -ls
12/01/31 14:04:39 INFO security.Groups: Group mapping impl=org.apache.hadoop.security.ShellBasedUnixGroupsMapping; cacheTimeout=300000
12/01/31 14:04:39 WARN conf.Configuration: mapred.task.id is deprecated. Instead, use mapreduce.task.attempt.id
Found 1 items
drwxr-xr-x - root supergroup 0 2012-01-31 13:57 /user/root/test
问题二
# hadoop fs -put ../conf input 时出现错误如下:
12/01/31 16:01:25 INFO security.Groups: Group mapping impl=org.apache.hadoop.security.ShellBasedUnixGroupsMapping; cacheTimeout=300000
12/01/31 16:01:25 WARN conf.Configuration: mapred.task.id is deprecated. Instead, use mapreduce.task.attempt.id
12/01/31 16:01:26 WARN hdfs.DFSClient: DataStreamer Exception: java.io.IOException: File /user/root/input/ssl-server.xml.example could only be replicated to 0 nodes, instead of 1
put: File /user/root/input/ssl-server.xml.example could only be replicated to 0 nodes, instead of 1
12/01/31 16:01:26 ERROR hdfs.DFSClient: Exception closing file /user/root/input/ssl-server.xml.example : java.io.IOException: File /user/root/input/ssl-server.xml.example could only be replicated to 0 nodes, instead of 1
解决方案:
这个问题是由于没有添加节点的原因,也就是说需要先启动namenode,再启动datanode,然后启动jobtracker和tasktracker。这样就不会存在这个问题了。 目前解决办法是分别启动节点#hadoop-daemon.sh start namenode #$hadoop-daemon.sh start datanode
1. 重新启动namenode
# hadoop-daemon.sh stop namenode
stopping namenode
# hadoop-daemon.sh start namenode
starting namenode, logging to /usr/hadoop-0.21.0/bin/../logs/hadoop-root-namenode-www.keli.com.out
DEPRECATED: Use of this script to execute hdfs command is deprecated.
Instead use the hdfs command for it.
2. 重新启动datanode
# hadoop-daemon.sh stop datanode
stopping datanode
# hadoop-daemon.sh start datanode
starting datanode, logging to /usr/hadoop-0.21.0/bin/../logs/hadoop-root-datanode-www.keli.com.out
DEPRECATED: Use of this script to execute hdfs command is deprecated.
Instead use the hdfs command for it.
3. 切换到hadoop的bin目录
# cd /usr/hadoop-0.21.0/bin/
4. 浏览hdfs目录
[root@www bin]# hadoop fs -ls
12/01/31 16:09:45 INFO security.Groups: Group mapping impl=org.apache.hadoop.security.ShellBasedUnixGroupsMapping; cacheTimeout=300000
12/01/31 16:09:45 WARN conf.Configuration: mapred.task.id is deprecated. Instead, use mapreduce.task.attempt.id
Found 4 items
drwxr-xr-x - root supergroup 0 2012-01-31 16:01 /user/root/input
drwxr-xr-x - root supergroup 0 2012-01-31 15:24 /user/root/test
-rw-r--r-- 1 root supergroup 0 2012-01-31 14:37 /user/root/test-in
drwxr-xr-x - root supergroup 0 2012-01-31 14:32 /user/root/test1
5. 删除hdfs中的input目录
[root@www bin]# hadoop fs -rmr input
12/01/31 16:10:09 INFO security.Groups: Group mapping impl=org.apache.hadoop.security.ShellBasedUnixGroupsMapping; cacheTimeout=300000
12/01/31 16:10:09 WARN conf.Configuration: mapred.task.id is deprecated. Instead, use mapreduce.task.attempt.id
Deleted hdfs://m106:9000/user/root/input
6. 上传数据到hdfs中的input目录
[root@www bin]# hadoop fs -put ../conf input
12/01/31 16:10:14 INFO security.Groups: Group mapping impl=org.apache.hadoop.security.ShellBasedUnixGroupsMapping; cacheTimeout=300000
12/01/31 16:10:14 WARN conf.Configuration: mapred.task.id is deprecated. Instead, use mapreduce.task.attempt.id
7. 浏览input目录,检查已上传的数据
[root@www bin]# hadoop fs -ls input
12/01/31 16:10:21 INFO security.Groups: Group mapping impl=org.apache.hadoop.security.ShellBasedUnixGroupsMapping; cacheTimeout=300000
12/01/31 16:10:21 WARN conf.Configuration: mapred.task.id is deprecated. Instead, use mapreduce.task.attempt.id
Found 16 items
-rw-r--r-- 1 root supergroup 3426 2012-01-31 16:10 /user/root/input/capacity-scheduler.xml
-rw-r--r-- 1 root supergroup 1335 2012-01-31 16:10 /user/root/input/configuration.xsl
-rw-r--r-- 1 root supergroup 757 2012-01-31 16:10 /user/root/input/core-site.xml
-rw-r--r-- 1 root supergroup 321 2012-01-31 16:10 /user/root/input/fair-scheduler.xml
-rw-r--r-- 1 root supergroup 2237 2012-01-31 16:10 /user/root/input/hadoop-env.sh
-rw-r--r-- 1 root supergroup 1650 2012-01-31 16:10 /user/root/input/hadoop-metrics.properties
-rw-r--r-- 1 root supergroup 4644 2012-01-31 16:10 /user/root/input/hadoop-policy.xml
-rw-r--r-- 1 root supergroup 252 2012-01-31 16:10 /user/root/input/hdfs-site.xml
-rw-r--r-- 1 root supergroup 4141 2012-01-31 16:10 /user/root/input/log4j.properties
-rw-r--r-- 1 root supergroup 2997 2012-01-31 16:10 /user/root/input/mapred-queues.xml
-rw-r--r-- 1 root supergroup 430 2012-01-31 16:10 /user/root/input/mapred-site.xml
-rw-r--r-- 1 root supergroup 25 2012-01-31 16:10 /user/root/input/masters
-rw-r--r-- 1 root supergroup 26 2012-01-31 16:10 /user/root/input/slaves
-rw-r--r-- 1 root supergroup 1243 2012-01-31 16:10 /user/root/input/ssl-client.xml.example
-rw-r--r-- 1 root supergroup 1195 2012-01-31 16:10 /user/root/input/ssl-server.xml.example
-rw-r--r-- 1 root supergroup 250 2012-01-31 16:10 /user/root/input/taskcontroller.cfg
[root@www bin]#
问题三
Hadoop启动datanode时出现Unrecognized option: -jvm 和 Could not create the Java virtual machine.
[root@www bin]# hadoop-daemon.sh start datanode
starting datanode, logging to /usr/hadoop-0.20.203.0/bin/../logs/hadoop-root-datanode-www.keli.com.out
Unrecognized option: -jvm
Could not create the Java virtual machine.
解决办法:
在hadoop安装目录/bin/hadoop中有如下一段shell:
CLASS='org.apache.hadoop.hdfs.server.datanode.DataNode' if [[ $EUID -eq 0 ]]; then HADOOP_OPTS="$HADOOP_OPTS -jvm server $HADOOP_DATANODE_OPTS" else HADOOP_OPTS="$HADOOP_OPTS -server $HADOOP_DATANODE_OPTS" fi |
其中的
if [[ $EUID -eq 0 ]]; then
HADOOP_OPTS="$HADOOP_OPTS -jvm server $HADOOP_DATANODE_OPTS"
如果 $EUID 为 0,什么意思呢?
有效用户标识号(EUID):该标识号负责标识以什么用户身份来给新创建的进程赋所有权、检查文件的存取权限和检查通过系统调用kill向进程发送软中断信号的许可权限。
在root用户下echo $EUID,echo结果为 0。
ok,在root下会有-jvm选项添加上去,上面说的Unrecognized option: -jvm难道就是这里产生的。
两个想法。一个想法是自己改了这shell代码,去掉里面的-jvm。另外一个想法是既然这里要求 $EUID -eq 0,那别用$EUID不为0的(root用户)用户运行即可。果断试试,换上普通用户根据文档提示做。ok,成功。好奇的再试试第一个想法,其实暂时还是不太想动源码。但是这shell动动也没妨,果断去掉上面的-jvm,直接把上面的if else 结构直接去掉改为
HADOOP_OPTS="$HADOOP_OPTS -server $HADOOP_DATANODE_OPTS",
同样运行成功。
问题四
[root@www bin]# jps
3283 NameNode
2791 SecondaryNameNode
2856 JobTracker
3348 Jps
hadoop没有启动datanode
解决办法:
format之后之前的datanode会有一个ID,这个ID没有删除,所以会拒绝当前Namenode链接和分配。所以需要删除原来的datanode中的hdfs目录。
[root@freepp ~]# rm -rf /hadoopdata/
重启hadoop
[root@www bin]# jps
4132 Jps
3907 NameNode
4056 DataNode
2791 SecondaryNameNode
2856 JobTrackerHadoop学习全程记录——在Eclipse中运行第一个MapReduce程序
- localhost
- 9001
DFS Master
- localhost
- 9000
配置完后退出。点击DFS Locations-->myUbuntu如果能显示文件夹(2)说明配置正确,如果显示"拒绝连接",请检查你的配置。
第三步,新建项目。
File-->New-->Other-->Map/Reduce Project
项目名可以随便取,如Hadoop-test。
复制 Hadoop安装目录/src/example/org/apache/hadoop/example/WordCount.java到刚才新建的项目下面。
第四步,上传模拟数据文件夹。
为了运行程序,我们需要一个输入的文件夹,和输出的文件夹。输出文件夹,在程序运行完成后会自动生成。我们需要给程序一个输入文件夹。
1.在当前目录(如Hadoop安装目录)下新建文件夹input,并在文件夹下新建两个文件file01、file02,这两个文件内容分别如下:
file01
- Hello World Bye World
file02
- Hello Hadoop Goodbye Hadoop
2.将文件夹input上传到分布式文件系统中。
在已经启动Hadoop守护进程终端中cd 到hadoop安装目录,运行下面命令:
- bin/Hadoop fs -put input input01
这个命令将input文件夹上传到了Hadoop文件系统了,在该系统下就多了一个input01文件夹,你可以使用下面命令查看:
- bin/Hadoop fs -ls
第五步,运行项目。
1.在新建的项目Hadoop-test,点击WordCount.java,右键-->Run As-->Run Configurations
2.在弹出的Run Configurations对话框中,点Java Application,右键-->New,这时会新建一个application名为WordCount
3.配置运行参数,点Arguments,在Program arguments中输入“你要传给程序的输入文件夹和你要求程序将计算结果保存的文件夹”,如:
- hdfs://localhost:9000/user/panhuizhi/input01 hdfs://localhost:9000/user/panhuizhi/output01
这里面的input01就是你刚传上去文件夹。文件夹地址你可以根据自己具体情况填写。
4.点击Run,运行程序。
12/11/24 17:08:59 WARN mapred.JobClient: No job jar file set. User classes may not be found. See JobConf(Class) or JobConf#setJar(String).
12/11/24 17:08:59 INFO input.FileInputFormat: Total input paths to process : 2
12/11/24 17:08:59 INFO mapred.JobClient: Running job: job_local_0001
12/11/24 17:08:59 INFO input.FileInputFormat: Total input paths to process : 2
12/11/24 17:09:00 INFO mapred.MapTask: io.sort.mb = 100
12/11/24 17:09:00 INFO mapred.MapTask: data buffer = 79691776/99614720
12/11/24 17:09:00 INFO mapred.MapTask: record buffer = 262144/327680
12/11/24 17:09:00 INFO mapred.MapTask: Starting flush of map output
12/11/24 17:09:00 INFO mapred.MapTask: Finished spill 0
12/11/24 17:09:00 INFO mapred.TaskRunner: Task:attempt_local_0001_m_000000_0 is done. And is in the process of commiting
12/11/24 17:09:00 INFO mapred.LocalJobRunner:
12/11/24 17:09:00 INFO mapred.TaskRunner: Task 'attempt_local_0001_m_000000_0' done.
12/11/24 17:09:00 INFO mapred.MapTask: io.sort.mb = 100
12/11/24 17:09:00 INFO mapred.MapTask: data buffer = 79691776/99614720
12/11/24 17:09:00 INFO mapred.MapTask: record buffer = 262144/327680
12/11/24 17:09:00 INFO mapred.MapTask: Starting flush of map output
12/11/24 17:09:00 INFO mapred.MapTask: Finished spill 0
12/11/24 17:09:00 INFO mapred.TaskRunner: Task:attempt_local_0001_m_000001_0 is done. And is in the process of commiting
12/11/24 17:09:00 INFO mapred.LocalJobRunner:
12/11/24 17:09:00 INFO mapred.TaskRunner: Task 'attempt_local_0001_m_000001_0' done.
12/11/24 17:09:00 INFO mapred.LocalJobRunner:
12/11/24 17:09:00 INFO mapred.Merger: Merging 2 sorted segments
12/11/24 17:09:00 INFO mapred.Merger: Down to the last merge-pass, with 2 segments left of total size: 77 bytes
12/11/24 17:09:00 INFO mapred.LocalJobRunner:
12/11/24 17:09:00 INFO mapred.TaskRunner: Task:attempt_local_0001_r_000000_0 is done. And is in the process of commiting
12/11/24 17:09:00 INFO mapred.LocalJobRunner:
12/11/24 17:09:00 INFO mapred.TaskRunner: Task attempt_local_0001_r_000000_0 is allowed to commit now
12/11/24 17:09:00 INFO output.FileOutputCommitter: Saved output of task 'attempt_local_0001_r_000000_0' to hdfs://localhost:9000/user/tgrqap6qhvnoh4d/administrator/output01
12/11/24 17:09:00 INFO mapred.LocalJobRunner: reduce > reduce
12/11/24 17:09:00 INFO mapred.TaskRunner: Task 'attempt_local_0001_r_000000_0' done.
12/11/24 17:09:01 INFO mapred.JobClient: map 100% reduce 100%
12/11/24 17:09:01 INFO mapred.JobClient: Job complete: job_local_0001
12/11/24 17:09:01 INFO mapred.JobClient: Counters: 14
12/11/24 17:09:01 INFO mapred.JobClient: FileSystemCounters
12/11/24 17:09:01 INFO mapred.JobClient: FILE_BYTES_READ=51328
12/11/24 17:09:01 INFO mapred.JobClient: HDFS_BYTES_READ=139
12/11/24 17:09:01 INFO mapred.JobClient: FILE_BYTES_WRITTEN=104570
12/11/24 17:09:01 INFO mapred.JobClient: HDFS_BYTES_WRITTEN=41
12/11/24 17:09:01 INFO mapred.JobClient: Map-Reduce Framework
12/11/24 17:09:01 INFO mapred.JobClient: Reduce input groups=5
12/11/24 17:09:01 INFO mapred.JobClient: Combine output records=6
12/11/24 17:09:01 INFO mapred.JobClient: Map input records=4
12/11/24 17:09:01 INFO mapred.JobClient: Reduce shuffle bytes=0
12/11/24 17:09:01 INFO mapred.JobClient: Reduce output records=5
12/11/24 17:09:01 INFO mapred.JobClient: Spilled Records=12
12/11/24 17:09:01 INFO mapred.JobClient: Map output bytes=82
12/11/24 17:09:01 INFO mapred.JobClient: Combine input records=8
12/11/24 17:09:01 INFO mapred.JobClient: Map output records=8
12/11/24 17:09:01 INFO mapred.JobClient: Reduce input records=6
点击Run,运行程序,过段时间将运行完成,等运行结束后,可以在终端中用命令:
- bin/Hadoop fs -ls
查看是否生成文件夹output01。
用下面命令查看生成的文件内容:
- bin/Hadoop fs -cat output01/*
如果显示如下,恭喜你一切顺利,你已经成功在eclipse下运行第一个MapReduce程序了。
- Bye 1
- Goodbye 1
- Hadoop 2
- Hello 2
- World 2
第一步:修改core-site.xml,配置如下内容:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
<final>true</final>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
第二步:修改hdfs-site.xml文件,配置如下内容:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>dfs.name.dir</name>
<value>/wen/hadoop/working/name</value>
<final>true</final>
</property>
<property>
<name>dfs.data.dir</name>
<value>/wen/hadoop/working/data</value>
<final>true</final>
</property>
<property>
<name>fs.checkpoint.dir</name>
<value>/wen/hadoop/working/checkpoint</value>
<final>true</final>
</property>
</configuration>
第三步:修改mapred-site.xml配置如下内容:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>hdfs://localhost:9001</value>
<final>true</final>
</property>
<property>
<name>mapred.local.dir</name>
<value>/wen/working/dir1,/wen/hadoop/working/dir2</value>
<final>true</final>
</property>
<property>
<name>mapred.system.dir</name>
<value>/wen/hadoop/working/system</value>
<final>true</final>
</property>
</configuration>
第4步,进入cygwin客户端,执行
$ cd /wen/hadoop 【其中/d/hadoop 为hadoop安装目录】
$ bin/hadoop namenode –format 【格式化namenode】
第5步,修改工作目录权限
$ bin/hadoop dfs chmod 777 /wen/hadoop/working 【/wen/hadoop/working 为工作目录,默认是tmp】
第6步,启动hadoop
$ bin/start-all.sh
$ ps –ef
通过ps查看进程,能看到5个java进程,即成功。
常见问题
(1)
执行 $ bin/hadoop start-all.sh之后,无法启动,在logs的namenode日志发现如下内容:
2011-08-03 08:43:08,068 ERROR org.apache.hadoop.hdfs.server.namenode.NameNode: java.lang.NullPointerException
at org.apache.hadoop.net.NetUtils.createSocketAddr(NetUtils.java:136)
at org.apache.hadoop.hdfs.server.namenode.NameNode.getAddress(NameNode.java:176)
at org.apache.hadoop.hdfs.server.namenode.NameNode.getAddress(NameNode.java:206)
at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:240)
at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:434)
at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1153)
at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1162)
解决方法:此时是没有配置conf/mapred-site.xml的缘故. 配置core-site.xml文件
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
<final>true</final>
</property>
配置mapred-site.xml文件:
<property>
<name>mapred.job.tracker</name>
<value>hdfs://localhost:9001</value>
<final>true</final>
</property>
(2)执行 hadoop fs -ls
显示结果:ls: Cannot access .: No such file or directory.
这是这个目录为空所致。执行
hadoop fs -ls /
可以看到有一条结果。执行hadoop fs -mkdir hello 其中hello为文件夹名字,再执行ls命令,即可看到结果。
(3) TaskTracker无法启动,在logs中查看tasktracker日志,出现如下错误:
2011-08-03 08:46:45,750 ERROR org.apache.hadoop.mapred.TaskTracker: Can not start task tracker because java.io.IOException: Failed to set permissions of path: /wen/hadoop/working/dir1/ttprivate to 0700
at org.apache.hadoop.fs.RawLocalFileSystem.checkReturnValue(RawLocalFileSystem.java:525)
at org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:499)
at org.apache.hadoop.fs.RawLocalFileSystem.mkdirs(RawLocalFileSystem.java:318)
at org.apache.hadoop.fs.FilterFileSystem.mkdirs(FilterFileSystem.java:183)
at org.apache.hadoop.mapred.TaskTracker.initialize(TaskTracker.java:635)
at org.apache.hadoop.mapred.TaskTracker.<init>(TaskTracker.java:1328)
at org.apache.hadoop.mapred.TaskTracker.main(TaskTracker.java:3430)
解决方式:1.确认hadoop的版本,在0.20.203版本上有这个bug,切换会0.20.2版本;2. 执行第5步,授权
1、列出所有Hadoop Shell支持的命令
$ bin/hadoop fs -help
2、显示关于某个命令的详细信息
$ bin/hadoop fs -help command-name
3、用户可使用以下命令在指定路径下查看历史日志汇总
$ bin/hadoop job -history output-dir
这条命令会显示作业的细节信息,失败和终止的任务细节。
4、关于作业的更多细节,比如成功的任务,以及对每个任务的所做的尝试次数等可以用下面的命令查看
$ bin/hadoop job -history all output-dir
5、 格式化一个新的分布式文件系统:
$ bin/hadoop namenode -format
6、在分配的NameNode上,运行下面的命令启动HDFS:
$ bin/start-dfs.sh
bin/start-dfs.sh脚本会参照NameNode上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上启动DataNode守护进程。
7、在分配的JobTracker上,运行下面的命令启动Map/Reduce:
$ bin/start-mapred.sh
bin/start-mapred.sh脚本会参照JobTracker上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上启动TaskTracker守护进程。
8、在分配的NameNode上,执行下面的命令停止HDFS:
$ bin/stop-dfs.sh
bin/stop-dfs.sh脚本会参照NameNode上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上停止DataNode守护进程。
9、在分配的JobTracker上,运行下面的命令停止Map/Reduce:
$ bin/stop-mapred.sh
bin/stop-mapred.sh脚本会参照JobTracker上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上停止TaskTracker守护进程。
DFSShell
10、创建一个名为 /foodir 的目录
$ bin/hadoop dfs -mkdir /foodir
11、创建一个名为 /foodir 的目录
$ bin/hadoop dfs -mkdir /foodir
12、查看名为 /foodir/myfile.txt 的文件内容
$ bin/hadoop dfs -cat /foodir/myfile.txt
DFSAdmin
13、将集群置于安全模式
$ bin/hadoop dfsadmin -safemode enter
14、显示Datanode列表
$ bin/hadoop dfsadmin -report
15、使Datanode节点 datanodename退役
$ bin/hadoop dfsadmin -decommission datanodename
16、bin/hadoop dfsadmin -help 命令能列出所有当前支持的命令。比如:
* -report:报告HDFS的基本统计信息。有些信息也可以在NameNode Web服务首页看到。
* -safemode:虽然通常并不需要,但是管理员的确可以手动让NameNode进入或离开安全模式。
* -finalizeUpgrade:删除上一次升级时制作的集群备份。
17、显式地将HDFS置于安全模式
$ bin/hadoop dfsadmin -safemode
18、在升级之前,管理员需要用(升级终结操作)命令删除存在的备份文件
$ bin/hadoop dfsadmin -finalizeUpgrade
19、能够知道是否需要对一个集群执行升级终结操作。
$ dfsadmin -upgradeProgress status
20、使用-upgrade选项运行新的版本
$ bin/start-dfs.sh -upgrade
21、如果需要退回到老版本,就必须停止集群并且部署老版本的Hadoop,用回滚选项启动集群
$ bin/start-dfs.h -rollback
22、下面的新命令或新选项是用于支持配额的。 前两个是管理员命令。
* dfsadmin -setquota <N> <directory>...<directory>
把每个目录配额设为N。这个命令会在每个目录上尝试, 如果N不是一个正的长整型数,目录不存在或是文件名, 或者目录超过配额,则会产生错误报告。
* dfsadmin -clrquota <directory>...<director>
为每个目录删除配额。这个命令会在每个目录上尝试,如果目录不存在或者是文件,则会产生错误报告。如果目录原来没有设置配额不会报错。
* fs -count -q <directory>...<directory>
使用-q选项,会报告每个目录设置的配额,以及剩余配额。 如果目录没有设置配额,会报告none和inf。
23、创建一个hadoop档案文件
$ hadoop archive -archiveName NAME <src>* <dest>
-archiveName NAME 要创建的档案的名字。
src 文件系统的路径名,和通常含正则表达的一样。
dest 保存档案文件的目标目录。
24、递归地拷贝文件或目录
$ hadoop distcp <srcurl> <desturl>
srcurl 源Url
desturl 目标Url
25、运行HDFS文件系统检查工具(fsck tools)
用法:hadoop fsck [GENERIC_OPTIONS] <path> [-move | -delete | -openforwrite] [-files [-blocks [-locations | -racks]]]
命令选项 描述
<path> 检查的起始目录。
-move 移动受损文件到/lost+found
-delete 删除受损文件。
-openforwrite 打印出写打开的文件。
-files 打印出正被检查的文件。
-blocks 打印出块信息报告。
-locations 打印出每个块的位置信息。
-racks 打印出data-node的网络拓扑结构。
26、用于和Map Reduce作业交互和命令(jar)
用法:hadoop job [GENERIC_OPTIONS] [-submit <job-file>] | [-status <job-id>] | [-counter <job-id> <group-name> <counter-name>] | [-kill <job-id>] | [-events <job-id> <from-event-#> <#-of-events>] | [-history [all] <jobOutputDir>] | [-list [all]] | [-kill-task <task-id>] | [-fail-task <task-id>]
命令选项 描述
-submit <job-file> 提交作业
-status <job-id> 打印map和reduce完成百分比和所有计数器。
-counter <job-id> <group-name> <counter-name> 打印计数器的值。
-kill <job-id> 杀死指定作业。
-events <job-id> <from-event-#> <#-of-events> 打印给定范围内jobtracker接收到的事件细节。
-history [all] <jobOutputDir> -history <jobOutputDir> 打印作业的细节、失败及被杀死原因的细节。更多的关于一个作业的细节比如
成功的任务,做过的任务尝试等信息可以通过指定[all]选项查看。
-list [all] -list all 显示所有作业。-list只显示将要完成的作业。
-kill-task <task-id> 杀死任务。被杀死的任务不会不利于失败尝试。
-fail-task <task-id> 使任务失败。被失败的任务会对失败尝试不利。
27、运行pipes作业
用法:hadoop pipes [-conf <path>] [-jobconf <key=value>, <key=value>, ...] [-input <path>] [-output <path>] [-jar <jar file>] [-inputformat <class>] [-map <class>] [-partitioner <class>] [-reduce <class>] [-writer <class>] [-program <executable>] [-reduces <num>]
命令选项 描述
-conf <path> 作业的配置
-jobconf <key=value>, <key=value>, ... 增加/覆盖作业的配置项
-input <path> 输入目录
-output <path> 输出目录
-jar <jar file> Jar文件名
-inputformat <class> InputFormat类
-map <class> Java Map类
-partitioner <class> Java Partitioner
-reduce <class> Java Reduce类
-writer <class> Java RecordWriter
-program <executable> 可执行程序的URI
-reduces <num> reduce个数
28、打印版本信息。
用法:hadoop version
29、hadoop脚本可用于调调用任何类。
用法:hadoop CLASSNAME
运行名字为CLASSNAME的类。
30、运行集群平衡工具。管理员可以简单的按Ctrl-C来停止平衡过程(balancer)
用法:hadoop balancer [-threshold <threshold>]
命令选项 描述
-threshold <threshold> 磁盘容量的百分比。这会覆盖缺省的阀值。
31、获取或设置每个守护进程的日志级别(daemonlog)。
用法:hadoop daemonlog -getlevel <host:port> <name>
用法:hadoop daemonlog -setlevel <host:port> <name> <level>
命令选项 描述
-getlevel <host:port> <name> 打印运行在<host:port>的守护进程的日志级别。这个命令内部会连接http://<host:port>/logLevel?log=<name>
-setlevel <host:port> <name> <level> 设置运行在<host:port>的守护进程的日志级别。这个命令内部会连接http://<host:port>/logLevel?log=<name>
32、运行一个HDFS的datanode。
用法:hadoop datanode [-rollback]
命令选项 描述
-rollback 将datanode回滚到前一个版本。这需要在停止datanode,分发老的hadoop版本之后使用。
33、运行一个HDFS的dfsadmin客户端。
用法:hadoop dfsadmin [GENERIC_OPTIONS] [-report] [-safemode enter | leave | get | wait] [-refreshNodes] [-finalizeUpgrade] [-upgradeProgress status | details | force] [-metasave filename] [-setQuota <quota> <dirname>...<dirname>] [-clrQuota <dirname>...<dirname>] [-help [cmd]]
命令选项 描述
-report 报告文件系统的基本信息和统计信息。
-safemode enter | leave | get | wait 安全模式维护命令。安全模式是Namenode的一个状态,这种状态下,Namenode
1. 不接受对名字空间的更改(只读)
2. 不复制或删除块
Namenode会在启动时自动进入安全模式,当配置的块最小百分比数满足最小的副本数条件时,会自动离开安全模式。安全模式可以手动进入,但是这样的话也必须手动关闭安全模式。
-refreshNodes 重新读取hosts和exclude文件,更新允许连到Namenode的或那些需要退出或入编的Datanode的集合。
-finalizeUpgrade 终结HDFS的升级操作。Datanode删除前一个版本的工作目录,之后Namenode也这样做。这个操作完结整个升级过程。
-upgradeProgress status | details | force 请求当前系统的升级状态,状态的细节,或者强制升级操作进行。
-metasave filename 保存Namenode的主要数据结构到hadoop.log.dir属性指定的目录下的<filename>文件。对于下面的每一项,
<filename>中都会一行内容与之对应
1. Namenode收到的Datanode的心跳信号
2. 等待被复制的块
3. 正在被复制的块
4. 等待被删除的块
-setQuota <quota> <dirname>...<dirname> 为每个目录 <dirname>设定配额<quota>。目录配额是一个长整型整数,强制限定了目录树下的名字个数。
命令会在这个目录上工作良好,以下情况会报错:
1. N不是一个正整数,或者
2. 用户不是管理员,或者
3. 这个目录不存在或是文件,或者
4. 目录会马上超出新设定的配额。
-clrQuota <dirname>...<dirname> 为每一个目录<dirname>清除配额设定。
命令会在这个目录上工作良好,以下情况会报错:
1. 这个目录不存在或是文件,或者
2. 用户不是管理员。
如果目录原来没有配额不会报错。
-help [cmd] 显示给定命令的帮助信息,如果没有给定命令,则显示所有命令的帮助信息。
34、运行MapReduce job Tracker节点(jobtracker)。
用法:hadoop jobtracker
35、运行namenode。有关升级,回滚,升级终结的更多信息请参考升级和回滚。
用法:hadoop namenode [-format] | [-upgrade] | [-rollback] | [-finalize] | [-importCheckpoint]
命令选项 描述
-format 格式化namenode。它启动namenode,格式化namenode,之后关闭namenode。
-upgrade 分发新版本的hadoop后,namenode应以upgrade选项启动。
-rollback 将namenode回滚到前一版本。这个选项要在停止集群,分发老的hadoop版本后使用。
-finalize finalize会删除文件系统的前一状态。最近的升级会被持久化,rollback选项将再
不可用,升级终结操作之后,它会停掉namenode。
-importCheckpoint 从检查点目录装载镜像并保存到当前检查点目录,检查点目录由fs.checkpoint.dir指定。
36、运行HDFS的secondary namenode。
用法:hadoop secondarynamenode [-checkpoint [force]] | [-geteditsize]
命令选项 描述
-checkpoint [force] 如果EditLog的大小 >= fs.checkpoint.size,启动Secondary namenode的检查点
过程。 如果使用了-force,将不考虑EditLog的大小。
-geteditsize 打印EditLog大小。
37、运行MapReduce的task Tracker节点。
用法:hadoop tasktracker
1、列出所有Hadoop Shell支持的命令
$ bin/hadoop fs -help
2、显示关于某个命令的详细信息
$ bin/hadoop fs -help command-name
3、用户可使用以下命令在指定路径下查看历史日志汇总
$ bin/hadoop job -history output-dir
这条命令会显示作业的细节信息,失败和终止的任务细节。
4、关于作业的更多细节,比如成功的任务,以及对每个任务的所做的尝试次数等可以用下面的命令查看
$ bin/hadoop job -history all output-dir
5、 格式化一个新的分布式文件系统:
$ bin/hadoop namenode -format
6、在分配的NameNode上,运行下面的命令启动HDFS:
$ bin/start-dfs.sh
bin/start-dfs.sh脚本会参照NameNode上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上启动DataNode守护进程。
7、在分配的JobTracker上,运行下面的命令启动Map/Reduce:
$ bin/start-mapred.sh
bin/start-mapred.sh脚本会参照JobTracker上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上启动TaskTracker守护进程。
8、在分配的NameNode上,执行下面的命令停止HDFS:
$ bin/stop-dfs.sh
bin/stop-dfs.sh脚本会参照NameNode上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上停止DataNode守护进程。
9、在分配的JobTracker上,运行下面的命令停止Map/Reduce:
$ bin/stop-mapred.sh
bin/stop-mapred.sh脚本会参照JobTracker上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上停止TaskTracker守护进程。
DFSShell
10、创建一个名为 /foodir 的目录
$ bin/hadoop dfs -mkdir /foodir
11、创建一个名为 /foodir 的目录
$ bin/hadoop dfs -mkdir /foodir
12、查看名为 /foodir/myfile.txt 的文件内容
$ bin/hadoop dfs -cat /foodir/myfile.txt
DFSAdmin
13、将集群置于安全模式
$ bin/hadoop dfsadmin -safemode enter
14、显示Datanode列表
$ bin/hadoop dfsadmin -report
15、使Datanode节点 datanodename退役
$ bin/hadoop dfsadmin -decommission datanodename
16、bin/hadoop dfsadmin -help 命令能列出所有当前支持的命令。比如:
* -report:报告HDFS的基本统计信息。有些信息也可以在NameNode Web服务首页看到。
* -safemode:虽然通常并不需要,但是管理员的确可以手动让NameNode进入或离开安全模式。
* -finalizeUpgrade:删除上一次升级时制作的集群备份。
17、显式地将HDFS置于安全模式
$ bin/hadoop dfsadmin -safemode
18、在升级之前,管理员需要用(升级终结操作)命令删除存在的备份文件
$ bin/hadoop dfsadmin -finalizeUpgrade
19、能够知道是否需要对一个集群执行升级终结操作。
$ dfsadmin -upgradeProgress status
20、使用-upgrade选项运行新的版本
$ bin/start-dfs.sh -upgrade
21、如果需要退回到老版本,就必须停止集群并且部署老版本的Hadoop,用回滚选项启动集群
$ bin/start-dfs.h -rollback
最近在研究分布式数据,其中用到的就是Hadoop, Hadoop网上的资料不多,特别是运行中运行的问题更是找不到,以下是我运行的一点心得,嘻嘻。
如果在map/reduce的程序中用到java 的代码,可以在java的环境下写好,我用的是eclipse。
1. 进入工程目录找到代码,进bin目录,将用到的包打成 .jar 文件。bin 文件下是 .class文件,一定要是bin,不是src文件中的 .java 文件。 在ubuntu的打.jar 的命令是 jar -cvf jarname.jar ./*
2. 将打好的 .jar文件复制到 Hadoop的目录下。
3. 切换到Hadoop目录下,编译含map/reduce函数的test .java 文件。命令: javac -classpath hadoop-0.19.2-dev-core.jar:jarname.jar test.jar -d a. a是编译后.class存放的文件夹。
编译时要注意每次改动test.java文件时都要编译一次,而且在core.jar:jarname.jar中不能有空格,我就是因为有空格,导致test.java文件中老是出现软件包不存在的错误。而且这是jarname.jar 要在Hadoop目录下。如果没有:后面的,是不是就直接在lib文件下匹配,以后在研究下。
如果不用引人其它包,把:jarname.jar 去掉。
4. 进入含编译文件的a 文件夹,打 tests.jar 文件。
5. 运行代码: bin/hadoop jar tests.jar org.test in out org.test中org是包名, in 是输入文件,out是输出文件。
其中tests.jar 放在Hadoop目录下就可以了,但引用的jarname.jar 要放到lib文件夹下。
相关推荐
4. **安装Java程序开发工具:IntelliJ IDEA**:选择一个合适的版本下载安装,这里推荐使用Ultimate版,它提供了更多高级功能支持,如Maven和Hadoop集成。 5. **导包完成**:在IntelliJ IDEA中创建一个新的Maven项目...
在Java程序中嵌入Matlab代码,可以充分利用Matlab在图像处理领域的专业优势。 在实施基于Hadoop的Java调用Matlab混合编程的车牌识别过程中,需要进行一系列的配置工作。首先需要在机器上安装Java开发工具包(JDK)...
这个“Hadoop入门程序java源码”是为初学者准备的,目的是帮助他们快速掌握如何在Hadoop环境中编写和运行Java程序。Hadoop的主要组件包括HDFS(Hadoop分布式文件系统)和MapReduce,这两个部分将在下面详细介绍。 ...
之后需要下载Hadoop软件,解压,并配置Hadoop运行环境,格式化HDFS(Hadoop分布式文件系统),启动Hadoop环境并运行程序进行测试,最后查看集群状态确认安装和运行情况是否正常。 2. 集群Hadoop系统安装基本步骤 ...
在运行WordCount程序之前,我们需要编译和打包Java代码。编译完成后,我们可以使用Hadoop的jar命令来运行WordCount程序。最后,我们可以使用Hadoop的命令行工具来查看输出结果。 WordCount程序的实现主要包括三个...
2. **JAVA JDK安装**:在Linux环境下安装和配置Java Development Kit (JDK) 是运行和开发Hadoop程序的必要条件。实验要求学生熟悉这一过程。 3. **多台主机虚拟化**:通过VirtualBox或类似工具创建多台虚拟机,模拟...
### Hadoop运行WordCount实例详解 #### 一、Hadoop简介与WordCount程序的重要性 Hadoop 是一个由Apache基金会所开发的分布式系统基础架构。它能够处理非常庞大的数据集,并且能够在集群上运行,通过将大数据分割...
本项目将详细介绍如何在Hadoop环境中成功运行WordCount程序,以及涉及到的相关知识点。 首先,`Hadoop`是一个基于Java的框架,设计用来处理和存储大规模数据。它采用了分布式计算模型,即MapReduce,将大型任务分解...
总结,"hadoop组件程序包.zip"是一个为Hadoop初学者量身定制的学习资源,通过深入学习和实践,初学者可以全面掌握Hadoop的核心组件及其工作原理,为未来在大数据领域的探索和发展打下坚实基础。
总之,要在Windows下的Eclipse环境中成功运行MapReduce程序,关键在于正确配置Hadoop环境,导入所有必要的jar包,并理解如何设置和提交MapReduce作业。这个过程可能需要一些时间和实践,但一旦配置完成,将为高效...
### 使用命令行编译打包运行自己的MapReduce程序 Hadoop2.6.0 #### Hadoop 2.x 版本变化及依赖分析 在Hadoop 2.x版本中,相较于早期版本,其架构和依赖库有了明显的变化。在早期版本如1.x中,所有的依赖都集中在`...
首先,Hadoop依赖于Java运行环境(JRE),因此在Windows上运行Hadoop之前,必须先安装并配置好Java。其次,Hadoop通常依赖于Unix/Linux命令行工具,如SSH和脚本语言,因此在Windows上可能需要安装额外的模拟工具,如...
在开发Hadoop应用程序时,Eclipse作为Java IDE是开发者常用的选择。为了在Eclipse中运行Hadoop 2.7.3程序,你需要确保正确配置了项目依赖并包含了所有必需的JAR包。以下是你需要知道的关键知识点: 1. **Hadoop环境...
通过这个Wordcount实例,我们可以学习到Hadoop MapReduce的基本工作原理,同时也可以了解到如何在Java中编写Hadoop程序。这只是一个基本的应用,实际的Hadoop项目可能会涉及更复杂的逻辑和优化,如分块、分区、压缩...
通常,一个Java Web应用程序由Servlet、JSP(JavaServer Pages)、JavaBeans等组件构成,它们运行在Web服务器上,如Tomcat或Jetty。要调用Hadoop 2.6,我们需要在Web应用程序中引入Hadoop的相关库,这可以通过Maven...
在Windows下eclipse运行java程序,报错原因是没有添加正确的库,这是hadoop-2.8.4 所需的jar包。 在Windows的eclipse运行java程序,调试无报错,打包成jar,上传到linux虚拟机(CentOS 64位),Hadoop2.8.4上进行...
安装JDK是运行和开发Java程序的第一步,包括Hadoop在内的许多大数据工具都依赖于Java环境。 **Hadoop** Hadoop是由Apache基金会维护的一个开源项目,它的核心组件包括HDFS(Hadoop Distributed File System)和...
7. **MapReduce编程**:Hadoop的MapReduce允许开发者编写Java程序处理分布式数据。在这个版本中,可能已经预装了一些示例MapReduce程序,供用户参考和学习。 8. **Spark集成**:Spark是另一个大数据处理框架,它...
- 单机模式:用于开发和测试,所有Hadoop进程都在一台机器上运行。 -伪分布式模式:在一个节点上模拟多节点集群,每个Hadoop进程独立运行。 - 完全分布式模式:在多台物理或虚拟机上部署,适用于生产环境。 6. ...
标题中的“Hadoop的分割程序的例子”是指一个实际的Java程序,它展示了如何在MapReduce作业中自定义分区逻辑。分区的主要目的是决定哪些键(keys)应该被送到哪个Reducer。默认情况下,Hadoop使用HashPartitioner,...