在hadoop运行java程序

本来准备自己写一个 测试程序,弄成jarbao

,运行一下,但是目前水平有限,写了一般 ,写不出来了,还有待继续学习,先转一片文章,帮我解决了不少问题

原文地址: http://www.cnblogs.com/itgg168/archive/2012/11/24.html

     最近在学习hadoop,从一个不知hadoop,大数据,云计算为何物的人,突然间要去研究,一时难以适应,悔恨自己以前算法,数据结构,Java基础,linux怎么都没好好学呢,却偏偏都要用到,真是“书到用时方恨少啊!”

    不过,悔恨解决不了问题,事情出了最好能冷静下来取分析当前的情况,并根据当前的情况作出最好的安排,不可否认,移动,大数据,云服务即将成为未来IT业发展的主流,学习hadoop进行大规模数据处理符合当今发展的潮流,所以,我必须花费更多的努力,将必备的知识学好,好好的武装自己。

 
posted @ 2012-11-24 19:18 蜗牛123 阅读(13) 评论(0)  编辑
 
 

问题一

# 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 JobTracker
 
posted @ 2012-11-24 16:50 蜗牛123 阅读(48) 评论(0)  编辑
 
 

Hadoop学习全程记录——在Eclipse中运行第一个MapReduce程序 

 
 
Java代码  
  1. localhost  
  2. 9001  


DFS Master 
Java代码  
  1. localhost  
  2. 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 
Java代码  
  1. Hello World Bye World   


file02 
Java代码  
  1. Hello Hadoop Goodbye Hadoop  


2.将文件夹input上传到分布式文件系统中。 

在已经启动Hadoop守护进程终端中cd 到hadoop安装目录,运行下面命令: 
Java代码  
  1. bin/Hadoop fs -put input input01  

这个命令将input文件夹上传到了Hadoop文件系统了,在该系统下就多了一个input01文件夹,你可以使用下面命令查看: 
Java代码  
  1. 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中输入“你要传给程序的输入文件夹和你要求程序将计算结果保存的文件夹”,如: 
Java代码  
  1. hdfs://localhost:9000/user/panhuizhi/input01 hdfs://localhost:9000/user/panhuizhi/output01  

这里面的input01就是你刚传上去文件夹。文件夹地址你可以根据自己具体情况填写。 



4.点击Run,运行程序。 
显示信息如下:
12/11/24 17:08:59 INFO jvm.JvmMetrics: Initializing JVM Metrics with processName=JobTracker, sessionId=
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,运行程序,过段时间将运行完成,等运行结束后,可以在终端中用命令: 
Java代码  
  1. bin/Hadoop fs -ls  

查看是否生成文件夹output01。 

用下面命令查看生成的文件内容: 
Java代码  
  1. bin/Hadoop fs -cat output01/*  


如果显示如下,恭喜你一切顺利,你已经成功在eclipse下运行第一个MapReduce程序了。 
Java代码  
  1. Bye 1  
  2. Goodbye 1  
  3. Hadoop  2  
  4. Hello   2  
  5. World   2  
cygwin下命令及结构图示:

 
posted @ 2012-11-24 13:19 蜗牛123 阅读(21) 评论(0)  编辑
 
 

第一步:修改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步,授权

 

 
posted @ 2012-11-24 12:20 蜗牛123 阅读(35) 评论(0)  编辑
 
 

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

 
posted @ 2012-11-24 12:03 蜗牛123 阅读(28) 评论(0)  编辑
 
 

最近在研究分布式数据,其中用到的就是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文件夹下。  

猜你喜欢

转载自younglibin.iteye.com/blog/1881627
今日推荐