`
younglibin
  • 浏览: 1194889 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

在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文件夹下。  

 

分享到:
评论

相关推荐

    将hadoop与java的编译器idea相连

    将hadoop与java的编译器idea相连,并编写wordcount程序

    java运行所需jar包,hadoop-2.8.4

    在Windows下eclipse运行java程序,报错原因是没有添加正确的库,这是hadoop-2.8.4 所需的jar包。 在Windows的eclipse运行java程序,调试无报错,打包成jar,上传到linux虚拟机(CentOS 64位),Hadoop2.8.4上进行...

    基于Hadoop的Java调用Matlab混合编程的车牌识别.pdf

    基于Hadoop的Java调用Matlab混合编程的车牌识别.pdf

    java web程序调用hadoop2.6

    java web程序演示调用hadoop2.6运行集群MR程序示例;

    在Hadoop的MapReduce任务中使用C程序的三种方法

    Hadoop是一个主要由Java语言开发的项目,基于Hadoop的MapReduce程序也主要是使用Java语言来编写。但是有一些时候,我们需要在MapReduce程序中使用C语言、C++以及其他的语言,比如项目的开发人员更熟悉Java之外的语言...

    hadoop初级程序源代码

    这是关于hadoop里面程序代码,有wordcount ,partition,onejoin, score,health,dedup,程序. 有.java,也有jar. 提示必须先装上hadoop才能运行

    Hadoop运行原理分析

    hadoop 是Google MapReduce的一个Java实现。MapReduce是一种简化的分布式编程模式,让程序自动分布到一个由 普通机器组成的超大集群上并发执行。就如同java程序员可以 不考虑内存泄露一样, MapReduce的run-time系统...

    hadoop-3.3.4 版本(最新版)

    够让用户轻松地在 Hadoop 上开发和运行处理海量数据的应用程序。 Hadoop 架构有两个主要的组件:分布式文件系统 HDFS 和 MapReduce 引擎。 在 Hadoop 中,MapReduce 底层的分布式文件系统是独文模块,用户可按照约定...

    hadoop段海涛老师八天实战视频

    07-MR程序的几种提交运行模式.avi 08-YARN的通用性意义.avi 09-yarn的job提交流程.avi 第四天 常见mr算法实现和shuffle的机制 01-复习.avi 02-hadoop中的序列化机制.avi 03-流量求和mr程序开发.avi 04-...

    hadoop-common.2.7.4.rar

    在开发工具中(例如Eclipse)使用Java语言开发Hadoop程序,调用API,可以在Windows环境运行。配置步骤大致是1 解压缩,2 配置Windows的环境变量HADOOP_HOME,添加bin目录到path中。3 把hadoop文件夹bin中的hadoop....

    Hadoop实战 中文版

    作为云计算所青睐的分布式架构,hadoop 是一个用java 语言实现的软件框架,在由大量计算机组成的集群中运行海量数据的分布式计算,是谷歌实现云计算的重要基石。本书分为3 个部分,深入浅出地介绍了hadoop 框架、...

    单词统计WordCount-hadoop程序

    wordcount单词统计,hadoop程序,可直接放在hadoop环境中运行

    新版Hadoop视频教程 段海涛老师Hadoop八天完全攻克Hadoop视频教程 Hadoop开发

    07-MR程序的几种提交运行模式.avi 08-YARN的通用性意义.avi 09-yarn的job提交流程.avi 第四天 常见mr算法实现和shuffle的机制 01-复习.avi 02-hadoop中的序列化机制.avi 03-流量求和mr程序开发.avi 04-...

    hadoop-2.6.0-hadoop.dll-winutils.exe

    windows上eclipse运行hadoop程序报NullPointerException错 log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.lib.MutableMetricsFactory). log4j:WARN Please initialize the log4j ...

    云计算技术实验报告三运行Hadoop MapReduce程序

    按照步骤完成命令行方式下Hadoop MR程序的编辑,编译,运行过程。 1)编辑java文件 可以采用任意的文本工具编辑Java代码 2)编译javac (1)设置CLASSPATH (2)编译java文件 (3)打jar包 4)执行 bin/hadoop jar ...

    Apache hadoop-3.1.0 版本

    够让用户轻松地在 Hadoop 上开发和运行处理海量数据的应用程序。 Hadoop 架构有两个主要的组件:分布式文件系统 HDFS 和 MapReduce 引擎。 在 Hadoop 中,MapReduce 底层的分布式文件系统是独文模块,用户可按照约定...

    hadoop基础教程

    人民邮电出版社Hadoop和云服务出现的历史背景,以及何时适用Hadoop的背景知识, 安装并配置Hadoop集群的最佳方式,根据手头的问题调整系统配置, 用Java和Ru by示例程序讲解如何编写运行在Hadoop上的程序, Amazon网络...

    Hadoop实战中文版

    1.5.2 相同程序在MapReduce中的扩展 1.6 用Hadoop统计单词——运行第一个程序 1.7 Hadoop历史 1.8 小结 1.9 资源 第2章 初识Hadoop 2.1 Hadoop 的构造模块显示全部信息第一部分 Hadoop——一种分布式编程框架...

    Hadoop从入门到上手企业开发

    049 MapReduce编程模型讲解及运行PI程序和JobWebUI监控Job运行 050 如何按照【八股文】方式编写MapReduce 051 复习MapReduce编写模型和【八股文】方式编写MapReduce 052 完成MyWordCount程序编写 053 打包运行...

    实验项目 MapReduce 编程

    3. 查看 Hadoop 自带的 MR-App 单词计数源代码 WordCount.java,在 Eclipse 项目 MapReduceExample 下建立新包 com.xijing.mapreduce,模仿内置的 WordCount 示例,自己编写一个 WordCount 程序,最后打包成 JAR ...

Global site tag (gtag.js) - Google Analytics