部署

Hadoop伪分布配置

  1. conf/hadoop-env.sh配置JAVA_HOME
    export JAVA_HOME=/etc/alternatives/java_sdk_1.6.0
  2. conf/core-site.xml文件中增加如下内容
    <configuration>
      <property>
        <name>fs.default.name</name>
        <value>hdfs://localhost:9000</value>
      </property>
      <property>
        <name>hadoop.tmp.dir</name>
        <value>/root/hdfs/tmp</value>
      </property>
    </configuration>

    fs.default.name - 这是一个描述集群中NameNode结点的URI(包括协议、主机名称、端口号),集群里面的每一台机器都需要知道NameNode的地址。DataNode结点会先在NameNode上注册,这样它们的数据才可以被使用。独立的客户端程序通过这个URI跟DataNode交互,以取得文件的块列表。
    hadoop.tmp.dir - 是hadoop文件系统依赖的基础配置,很多路径都依赖它。如果hdfs-site.xml中不配置namenode和datanode的存放位置,默认就放在这个路径中。

  3. conf/hdfs-site.xml中增加如下内容
    <configuration>
      <property>
        <name>dfs.replication</name>
        <value>1</value>
      </property>
      <property>
        <name>dfs.name.dir</name>
        <value>/root/hdfs/name</value>
      </property>
      <property>
        <name>dfs.data.dir</name>
        <value>/root/hdfs/data</value>
      </property>
      <property> 
        <name>dfs.permissions</name>
        <value>false</value>
        <description>
        If "true", enable permission checking in HDFS. If "false", permission checking is turned off, but all other behavior is unchanged.     Switching from one parameter value to the other does   not change the mode, owner or group of files or directories
        </description>
      </property>
    </configuration>

    dfs.replication - 它决定着系统里面的文件块的数据备份(复制)个数。因为伪分布式只有一个节点,所以只能填写1。对于一个实际的应用,它 应该被设为3(这个数字并没有上限,但更多的备份可能并没有作用,而且会占用更多的空间)。少于三个的备份,可能会影响到数据的可靠性。(系统故障时,也许会造成数据丢失。)
    dfs.data.dir - 这是DataNode结点被指定要存储数据的本地文件系统路径。DataNode结点上的这个路径没有必要完全相同,因为每台机器的环境很可能是不一样的。但如果每台机器上的这个路径都是统一配置的话,会使工作变得简单一些。默认的情况下,它的值hadoop.tmp.dir, 这个路径只能用于测试的目的,因为,它很可能会丢失掉一些数据。所以,这个值最好还是被覆盖。
    dfs.name.dir - 这是NameNode结点存储hadoop文件系统信息的本地系统路径。这个值只对NameNode有效,DataNode并不需要使用到它。上面对于/temp类型的警告,同样也适用于这里。在实际应用中,它最好被覆盖掉。
    解决:org.apache.hadoop.security.AccessControlException:Permission                                               denied:user=Administrator,access=WRITE,inode="tmp":root:supergroup:rwxr-xr-x 。
    因为Eclipse使用hadoop插件提交作业时,会默认以 DrWho 身份去将作业写入hdfs文件系统中,对应的也就是 HDFS 上的/user/hadoop ,  由于 DrWho 用户对hadoop目录并没有写入权限,所以导致异常的发生。解决方法为:放开 hadoop 目录的权限, 命令如下 :$ hadoop fs -chmod 777 /user/hadoop

  4. conf/mapred-site.xml中增加如下内容
    <configuration>
      <property>
        <name>mapred.job.tracker</name>
        <value>localhost:9001</value>
      </property>
    </configuration>

    mapred.job.tracker - JobTracker的主机(或者IP)和端口。

Hadoop操作命令

格式化工作空间:

* bin/hadoop namenode –format

启动hdfs,进入hadoop目录,在bin/下面有很多启动脚本,可以根据自己的需要来启动:

* start-all.sh 启动所有的Hadoop守护。包括NameNode、SecondaryNameNode、DataNode、JobTracker、TaskTracker
* stop-all.sh 停止所有的Hadoop。
* start-mapred.sh 启动Map/Reduce守护。包括Jobtracker和Tasktrack
* stop-mapred.sh 停止Map/Reduce守护。
* start-dfs.sh 启动Hadoop DFS守护Namenode和Datanode
* stop-dfs.sh 停止DFS守护  。

上传文件到HDFS

当前handoop安装路径在 /root/hadoop-1.1.2,在 /root 创建 input 文件夹,并创建文件,将文件复制到 HDFS 中 in 目录:

[root@localhost ~]# mkdir input
[root@localhost ~]# echo "hello world" > input/test1.txt
[root@localhost ~]# echo "hello hadoop" > input/test2.txt
[root@localhost ~]# cd hadoop-1.1.2/
[root@localhost hadoop-1.1.2]# bin/hadoop dfs -put ../input in
[root@localhost hadoop-1.1.2]# bin/hadoop dfs -ls ./in/*
-rw-r--r--   1 root supergroup         12 2013-05-20 15:46 /user/root/in/test1.txt
-rw-r--r--   1 root supergroup         13 2013-05-20 15:46 /user/root/in/test2.txt

其中,/user/root/ 并不是Linux的目录,而是 hadoop 自定义的,HDFS没有目录概念,也没有 cd 命令。在 Linux 目录中的存放位置在 hdfs-site.xml 中 dfs.data.dir 配置:

[root@localhost hadoop-1.1.2]# cd /root/hdfs/data/current
[root@localhost current]# ls
blk_1607940683954871348             blk_-5798984715238063206_1014.meta  blk_-742504615672546941
blk_1607940683954871348_1003.meta   blk_-6404498017205883587            blk_-742504615672546941_1002.meta
blk_-2632562190871551974            blk_-6404498017205883587_1013.meta  dncp_block_verification.log.curr
blk_-2632562190871551974_1004.meta  blk_-6727494795434287974            VERSION
blk_-5798984715238063206            blk_-6727494795434287974_1011.meta

所有的 HDFS 数据都存放在 blk 开头的文件中,我们无法查看得到。

运行 hadoop-examples-1.1.2.jar 的 wordcount 功能,测试 MapReduce 是否可以正常工作。其中 in 代表原始数据的目录,out 代表输出目录:

[root@localhost hadoop-1.1.2]# bin/hadoop jar hadoop-examples-1.1.2.jar wordcount in out
[root@localhost hadoop-1.1.2]# bin/hadoop dfs -ls
Found 2 items
drwxr-xr-x   - root supergroup          0 2013-05-20 15:46 /user/root/in
drwxr-xr-x   - root supergroup          0 2013-05-20 16:10 /user/root/out
[root@localhost hadoop-1.1.2]# bin/hadoop dfs -ls ./out/*
-rw-r--r--   1 root supergroup          0 2013-05-20 16:10 /user/root/out/_SUCCESS
drwxr-xr-x   - root supergroup          0 2013-05-20 16:09 /user/root/out/_logs/history
-rw-r--r--   1 root supergroup         25 2013-05-20 16:10 /user/root/out/part-r-00000
[root@localhost hadoop-1.1.2]# bin/hadoop dfs -cat ./out/part-r-00000
hadoop    1
hello    2
world    1

从 HDFS 复制到Linux 本地系统中,其中 in 是HDFS 的文件夹,~ 是代表复制到哪里:

[root@localhost hadoop-1.1.2]# bin/hadoop dfs -get in ~
[root@localhost hadoop-1.1.2]# ls ~/in
test1.txt  test2.txt

删除 HDFS 文件 / 文件夹,rm 删除文件、rmr 删除文件夹。

[root@localhost hadoop-1.1.2]# bin/hadoop dfs -rm ./in/test1.txt
Deleted hdfs://localhost:9000/user/root/in/test1.txt
[root@localhost hadoop-1.1.2]# bin/hadoop dfs -rmr ./in
Deleted hdfs://localhost:9000/user/root/in

查看 HDFS 基本统计信息:

[root@localhost hadoop-1.1.2]# bin/hadoop dfsadmin -report
Configured Capacity: 52844687360 (49.22 GB)
Present Capacity: 39977549824 (37.23 GB)
DFS Remaining: 39977414656 (37.23 GB)
DFS Used: 135168 (132 KB)
DFS Used%: 0%
Under replicated blocks: 0
Blocks with corrupt replicas: 0
Missing blocks: 0

-------------------------------------------------
Datanodes available: 1 (1 total, 0 dead)

Name: 127.0.0.1:50010
Decommission Status : Normal
Configured Capacity: 52844687360 (49.22 GB)
DFS Used: 135168 (132 KB)
Non DFS Used: 12867137536 (11.98 GB)
DFS Remaining: 39977414656(37.23 GB)
DFS Used%: 0%
DFS Remaining%: 75.65%
Last contact: Mon May 20 17:45:00 CST 2013

进入 / 退出 安全模式

[root@localhost hadoop-1.1.2]# bin/hadoop dfsadmin -safemode enter
Safe mode is ON
[root@localhost hadoop-1.1.2]# bin/hadoop dfsadmin -safemode leave
Safe mode is OFF

 

 

通过 HTTP 访问 JobTracker 所在节点的 50030 端口 来监控 JobTracker :http://localhost:50030/

通过 HTTP 访问 NameNode 所在节点的 50070 端口 来监控 集群 :http://localhost:50070/

 

http://blog.csdn.net/lin_fs/article/details/7349497

posted @ 2013-05-10 18:29  Kyle_Java  阅读(545)  评论(0编辑  收藏  举报