四、Hadoop 下令高级用法深度剖析

打印 上一主题 下一主题

主题 919|帖子 919|积分 2757

Hadoop 下令高级用法深度剖析

在大数据处理范畴,Hadoop 作为一个被广泛应用的框架,其所提供的一系列下令在数据操作与管理方面起着至关告急的作用。本文将对 Hadoop 下令的高级用法举行深入探讨,并结合详细实例举行详尽讲授,以助力读者更好地掌握这些强大的工具。
一、Hadoop fs 下令

(一)查看文件和目录



  • 下令:hadoop fs -ls /
  • 实例
  • 实行上述下令后,将会列出 Hadoop 文件体系根目录下的所有文件和目录。例如,大概会出现如下效果:
  1. drwxr-xr-x
  2. - user supergroup
  3. 0 2024-10-26 10:00 /input
  4. drwxr-xr-x
  5. - user supergroup
  6. 0 2024-10-26 10:01 /output
  7. -rw-r--r--
  8. 3 user supergroup
  9. 100 2024-10-26 09:58 /test.txt
复制代码


  • 这里的每一行代表一个文件或目录。第一列表示文件权限,第二列是文件的副本数,第三列和第四列分别为文件所有者和所属组,第五列是文件巨细,第六列是最后修改时间,最后一列是文件名或目录名。
(二)创建目录



  • 下令:hadoop fs -mkdir /new_directory
  • 实例
  • 该下令用于在 Hadoop 文件体系中创建一个名为new_directory的新目录。实行后,若创建成功,不会有任何输出信息。可再次利用-ls下令来验证目录是否创建成功。
  • 例如,实行hadoop fs -ls /后,应能看到/new_directory出如今列表中。
(三)上传文件



  • 下令:hadoop fs -put local_file.txt /hdfs_directory
  • 实例
  • 假设在本地有一个名为local_file.txt的文件,欲将其上传至 Hadoop 文件体系的/hdfs_directory目录下(若该目录不存在,需先创建)。
  • 实行hadoop fs -put local_file.txt /hdfs_directory下令后,文件将被上传至指定目录。可通过-ls /hdfs_directory下令查看上传的文件是否存在。
(四)下载文件



  • 下令:hadoop fs -get /hdfs_file.txt local_directory
  • 实例
  • 若要将 Hadoop 文件体系中的/hdfs_file.txt文件下载至本地的local_directory目录下(若本地目录不存在,会自动创建),可利用上述下令。
  • 实行后,可在本地local_directory目录中找到下载的文件hdfs_file.txt。
(五)删除文件和目录



  • 下令
  • 删除文件:hadoop fs -rm /file_to_delete.txt
  • 删除目录(空目录):hadoop fs -rmdir /directory_to_delete
  • 删除目录(非空目录):hadoop fs -rm -r /directory_to_delete_with_content
  • 实例
  • 当实行hadoop fs -rm /file_to_delete.txt时,指定的文件将被删除。若文件不存在,会提示相应的错误信息。
  • 对于删除空目录,利用hadoop fs -rmdir /directory_to_delete。例如,若有一个空目录/empty_directory,实行该下令后,目录将被删除。
  • 若要删除一个非空目录及其内容,可利用hadoop fs -rm -r /directory_to_delete_with_content。好比,有一个目录/data_directory下包含多个文件和子目录,实行该下令后,整个目录及其内容都会被删除。
二、Hadoop dfsadmin 下令

(一)陈诉文件体系的基本信息



  • 下令:hadoop dfsadmin -report
  • 实例
  • 实行该下令后,会输出关于文件体系的详细信息,包括文件体系的容量、已利用空间、剩余空间、副本系数等。例如:
  1. Configured Capacity: 100 TB
  2. Present Capacity: 80 TB
  3. DFS Remaining: 60 TB
  4. DFS Used: 20 TB
  5. DFS Used%: 25%
  6. Under replicated blocks: 50
  7. Blocks with corrupt replicas: 10
  8. Missing blocks: 20
复制代码


  • 这些信息对于监控和管理 Hadoop 文件体系的存储利用情况极为有用。可依据这些数据来规划存储资源的分配与扩展。
(二)设置文件体系的配额



  • 下令
  • 设置目录配额(空间巨细限定):hadoop dfsadmin -setQuota <quota_size> <directory_path>
  • 设置文件数量配额:hadoop dfsadmin -setSpaceQuota <quota_size> <directory_path>
  • 实例
  • 假设要限定/user/data目录的空间巨细为 10GB,可以实行hadoop dfsadmin -setQuota 10G /user/data。如此一来,当用户在该目录下存储的数据超过 10GB 时,将无法再写入新的数据。
  • 要设置该目录下允许的文件数量配额为 1000 个,可以利用hadoop dfsadmin -setSpaceQuota 1000 /user/data。当文件数量达到 1000 个后,用户将不能再在该目录下创建新文件。
(三)强制文件体系检查



  • 下令:hadoop dfsadmin -fsck /
  • 实例
  • 实行该下令会对整个 Hadoop 文件体系举行检查,查找文件体系中的不一致性和错误。例如,它可以检测到丢失的块、损坏的文件等问题。
  • 检查效果大概会显示雷同以下内容:
  1. The filesystem under path '/' is HEALTHY.
  2. Total size: 100000000000 B
  3. Total number of files: 10000
  4. Total number of directories: 1000
  5. Total number of blocks (validated): 50000
  6. Minimally replicated blocks: 49950
  7. Over-replicated blocks: 50
  8. Under-replicated blocks: 100
  9. Corrupt blocks: 10
  10. Missing replicas: 200
复制代码


  • 根据检查效果,可采取相应的步调来修复文件体系中的问题,如重新复制丢失的副本、修复损坏的文件等。
三、Hadoop job 下令

(一)提交作业



  • 下令:hadoop jar <jar_file> <main_class> <input_path> <output_path>
  • 实例
  • 假设拥有一个编写好的 MapReduce 作业的 JAR 文件myjob.jar,此中主类为com.example.MyMapReduceJob,输入数据在/input_data目录下,输出效果要生存到/output_result目录。
  • 实行hadoop jar myjob.jar com.example.MyMapReduceJob /input_data /output_result下令后,Hadoop 会将作业提交到集群上运行。作业运行过程中,可通过查看日志来了解作业的实行进度和状态。
(二)查看作业状态



  • 下令:hadoop job -list
  • 实例
  • 实行该下令会列出当前用户提交的所有作业的基本信息,包括作业 ID、作业名称、作业状态(如 RUNNING、SUCCEEDED、FAILED 等)、启动时间等。例如:
  1. JobId
  2. JobName
  3. Status
  4. StartTime
  5. job_1234 MyMapReduceJob
  6. RUNNING
  7. 2024-10-26 11:00:00
  8. job_5678 AnotherJob
  9. SUCCEEDED
  10. 2024-10-26 10:30:00
复制代码


  • 可根据作业 ID 来进一步查看特定作业的详细信息,例如利用hadoop job -status <job_id>下令。
(三)杀死作业



  • 下令:hadoop job -kill <job_id>
  • 实例
  • 如果某个作业运行出现问题或必要手动制止一个作业,可以利用该下令。例如,要杀死作业 ID 为job_1234的作业,实行hadoop job -kill job_1234。实行后,该作业将被强制制止。
四、Hadoop streaming 下令

(一)利用 Python 脚本举行 MapReduce 作业



  • 下令
  1. hadoop jar $HADOOP_HOME/share/hadoop/tools/lib/hadoop-streaming-*.jar \
  2. -input <input_path> \
  3. -output <output_path> \
  4. -mapper "python mapper.py" \
  5. -reducer "python reducer.py"
复制代码


  • 实例
  • 假设存在一个简单的文本处理任务,要统计每个单词在文本文件中出现的次数。可编写一个 Python 脚本作为 mapper,如下所示(mapper.py):
  1. import sys
  2. for line in sys.stdin:
  3. words = line.strip().split()
  4. for word in words:
  5. print(f"{word}\t1")
复制代码


  • 然后编写一个 reducer 脚本(reducer.py):
  1. import sys
  2. current_word = None
  3. current_count = 0
  4. word = None
  5. for line in sys.stdin:
  6. word, count = line.strip().split('\t')
  7. count = int(count)
  8. if current_word == word:
  9. current_count += count
  10. else:
  11. if current_word:
  12. print(f"{current_word}\t{current_count}")
  13. current_word = word
  14. current_count = count
  15. if current_word == word:
  16. print(f"{current_word}\t{current_count}")
复制代码


  • 假设输入数据在/input_text目录下,输出效果要生存到/output_wordcount目录。实行上述 Hadoop streaming 下令后,Hadoop 会利用指定的 Python 脚本作为 mapper 和 reducer 来处理输入数据,并将效果输出到指定目录。可查看/output_wordcount目录下的效果文件,验证单词计数是否正确。
(二)结合其他脚本语言举行数据处理



  • 除了 Python,Hadoop streaming 还支持其他脚本语言,如 Ruby、Perl 等。例如,利用 Ruby 编写 mapper 和 reducer 的示例:
  • Mapper(mapper.rb)
  1. STDIN.each_line do |line|
  2. words = line.split
  3. words.each do |word|
  4. puts "#{word}\t1"
  5. end
  6. end
复制代码


  • Reducer(reducer.rb)
  1. current_word = nil
  2. current_count = 0
  3. STDIN.each_line do |line|
  4. word, count = line.split("\t")
  5. count = count.to_i
  6. if current_word == word
  7. current_count += count
  8. else
  9. if current_word
  10. puts "#{current_word}\t#{current_count}"
  11. end
  12. current_word = word
  13. current_count = count
  14. end
  15. end
  16. if current_word == word
  17. puts "#{current_word}\t#{current_count}"
  18. end
复制代码


  • 实行 Hadoop streaming 下令雷同 Python 的示例,只需将-mapper和-reducer后的脚本路径和名称改为相应的 Ruby 脚本即可。例如:
  1. hadoop jar $HADOOP_HOME/share/hadoop/tools/lib/hadoop-streaming-*.jar \
  2. -input <input_path> \
  3. -output <output_path> \
  4. -mapper "ruby mapper.rb" \
  5. -reducer "ruby reducer.rb"
复制代码
通过以上对 Hadoop 下令高级用法的介绍和实例演示,期望读者能够更深入地明确和掌握 Hadoop 工具的强大功能,以便在大数据处理中更加高效地举行数据操作和作业管理。在实际应用中,可根据详细的业务需求和场景,机动运用这些下令和技术,充分发挥 Hadoop 在大数据处理方面的上风。
请注意,以上下令和实例中的路径、文件名、作业名称等都必要根据实际情况举行修改。同时,Hadoop 的版本和设置大概会影响下令的详细举动和参数,在利用时请参考相干的官方文档和实际情况举行调整。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

尚未崩坏

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表