Hadoop开发指南
注解:本例中所运行脚本需在CentOS操作系统上,其他操作系统请修改脚本后再尝试执行。
1. 创建Hadoop客户端节点
UHadoop提供客户端节点与SSH两种访问模式,优先建议使用客户端访问模式,具体见集群访问。
2. HDFS
HDFS是一个高度容错性和高吞吐量的分布式文件系统。它被设计的易于扩展也易于使用,适合海量文件的存储。
2.1 HDFS基础操作
- 查询文件
Usage: hadoop fs [generic options] -ls [-d] [-h] [-R] [<path>]
- 上传文件
Usage: hadoop fs [generic options] -put [-f] [-p] [-l] <localsrc> ... <dst>
- 下载文件
Usage: hadoop fs [generic options] -get [-p] [-ignoreCrc] [-crc] <src> ... <localdst>
更多请参考: hadoop fs -help
2.2 WebHDFS
WebHDFS提供HDFS的RESTful接口,可通过此接口进行HDFS文件操作。使用WebHDFS时,客户端是先通过Namenode节点获取文件所在的Datanode地址,再通过与Datanode节点进行数据交互。
2.2.1 上传文件
UHadoop集群默认配置2个Master节点,同一时刻只有一个节点Namenode处于Active状态,另一个处于Standby状态。下面以uhadoop-******-master1的Namenode为Active为例
-
数据准备
touch uhadoop.txt echo "uhadoop" > uhadoop.txt
-
创建文件请求
curl -i -X PUT "http://uhadoop-******-master1:50070/webhdfs/v1/tmp/uhadoop.txt?op=CREATE"
注解:
- 需要在执行此命令机器加上集群所有节点host
- 若提示Operation category READ is not supported in state standby,请更换uhadoop-******-master2尝试
执行上述命令将获取到Location地址,即文件的Datanode地址
HTTP/1.1 307 TEMPORARY_REDIRECT Location: http://<DATANODE>:<PORT>/webhdfs/v1/<PATH>?op=CREATE... Content-Length: 0
-
使用上述Location地址上传文件
curl -i -X PUT -T uhadoop.txt "http://uhadoop-******-core*:50075/webhdfs/v1/tmp/uhadoop.txt?op=CREATE&namenoderpcaddress=Ucluster&overwrite=false"
2.2.2 append文件
-
数据准备
touch append_uhadoop.txt echo "test_content" > append_uhadoop.txt
-
获取被append文件地址
curl -i -X POST "http://uhadoop-hfygbg-master1:50070/webhdfs/v1/tmp/uhadoop.txt?op=APPEND"
执行上述命令将获取到Location地址,即文件的Datanode地址
HTTP/1.1 307 TEMPORARY_REDIRECT Location: http://<DATANODE>:<PORT>/webhdfs/v1/<PATH>?op=CREATE... Content-Length: 0
-
追加文件
curl -i -X POST -T append_uhadoop.txt "http://uhadoop-******-core*:50075/webhdfs/v1/tmp/uhadoop.txt?op=APPEND&namenoderpcaddress=Ucluster"
2.2.3 打开读取文件
curl -i -L "http://uhadoop-******-master1:50070/webhdfs/v1/tmp/uhadoop.txt?op=OPEN"
2.2.4 删除文件
curl -i -X DELETE "http://uhadoop-******-master1:50070/webhdfs/v1/tmp/uhadoop.txt?op=DELETE"
2.3 HttpFS
Httpfs是cloudera提供的一个HDFS的http接口,可以通过WebHDFS REST API对HDFS进行读写等访问。与WebHDFS的区别是,Httpfs不需要客户端访问集群的每一个节点,只需授权访问启动了Httpfs服务的单台机器即可(UHadoop默认在master1:14000开启Httpfs)。由于Httpfs是在内嵌的tomcat中一个Web应用,因此性能上会受到一些限制。
2.3.1 上传文件
-
数据准备
touch httpfs_uhadoop.txt echo "httpfs_uhadoop" > httpfs_uhadoop.txt
-
上传数据
curl -i -X PUT -T httpfs_uhadoop.txt --header "Content-Type: application/octet-stream" "http://uhadoop-******-master1:14000/webhdfs/v1/tmp/httpfs_uhadoop.txt?op=CREATE&user.name=root&data=true"
注解:
- 需要在执行此命令机器加上集群master1的host
- url中需添加user.name,否则会报”HTTP Status 401 - Authentication required”错误
2.3.2 append文件
-
数据准备
touch append_httpfs.txt echo "append_httpfs" > append_httpfs.txt
-
追加文件
curl -i -X POST -T append_httpfs.txt --header "Content-Type: application/octet-stream" "http://uhadoop-******-master1:14000/webhdfs/v1/tmp/httpfs_uhadoop.txt?op=APPEND&user.name=root&data=true"
2.3.3 打开并读取文件
curl -i -L "http://uhadoop-******-master1:14000/webhdfs/v1/tmp/httpfs_uhadoop.txt?op=OPEN&user.name=root"
curl -i -X DELETE "http://uhadoop-******-master1:14000/webhdfs/v1/tmp/uhadoop.txt?op=DELETE"
2.3.4 删除文件
curl -i -X DELETE "http://uhadoop-******-master1:14000/webhdfs/v1/tmp/httpfs_uhadoop.txt?op=DELETE&user.name=root"
2.4 MapReduce Job
以terasort为例,说明如何提交一个MapReduce Job
-
生成官方terasort input数据集
hadoop jar /home/hadoop/hadoop-examples.jar teragen 100 /tmp/terasort_input
-
提交任务
hadoop jar /home/hadoop/hadoop-examples.jar terasort /tmp/terasort_input /tmp/terasort_output
2.5 HDFS日常运维
2.5.1 重启服务
重启Namenode:service hadoop-hdfs-namenode restart
重启Datanode:service hadoop-hdfs-datanode restart
重启ResourceManager: service hadoop-yarn-resourcemanager restart
重启NodeManager:service hadoop-yarn-nodemanager restart
重启整个Hadoop服务:请通过控制台集群服务管理页面操作
2.5.2 查看HDFS状态,节点信息
hdfs dfsadmin -report
2.5.3 修改HDFS文件副本数量
hdfs dfs -setrep -R [replication-factor] [targetDir]
示例:修改HDFS 根目录下文件副本数量为2,hdfs dfs -setrep -R 2 /
2.5.4 查看HDFS文件系统状态
hadoop fsck /
返回结果示例如下:
Total size: 455660769497 B (Total open files size: 44723814 B)
Total dirs: 47975
Total files: 70456
Total symlinks: 0 (Files currently being written: 11)
Total blocks (validated): 69916 (avg. block size 6517260 B) (Total open file blocks (not validated): 10)
Minimally replicated blocks: 69916 (100.0 %)
Over-replicated blocks: 0 (0.0 %)
Under-replicated blocks: 87 (0.12443504 %)
Mis-replicated blocks: 0 (0.0 %)
Default replication factor: 3
Average block replication: 3.0011585
Corrupt blocks: 0
Missing replicas: 522 (0.24815665 %)
Number of data-nodes: 4
Number of racks: 1
FSCK ended at Thu Nov 24 16:08:12 CST 2016 in 2044 milliseconds
The filesystem under path '/' is HEALTHY
上述HEALTHY表示当前HDFS文件系统正常,无坏块或者数据丢失