cari
Rumahpangkalan datatutorial mysqlHadoop伪分布式运行

Hadoop可以在单节点上以所谓的伪分布式模式运行,此时每一个Hadoop守护进程都作为一个独立的Java进程运行。本文通过自动化脚本配置Hadoop伪分布式模式。测试环境为VMware中的Centos 6.3, Hadoop 1.2.1.其他版本未测试。 伪分布式配置脚本 包括配置core-site.

Hadoop可以在单节点上以所谓的伪分布式模式运行,此时每一个Hadoop守护进程都作为一个独立的Java进程运行。本文通过自动化脚本配置Hadoop伪分布式模式。测试环境为VMware中的Centos 6.3, Hadoop 1.2.1.其他版本未测试。

伪分布式配置脚本

包括配置core-site.xml,hdfs-site.xml及mapred-site.xml,配置ssh免密码登陆。[1]

#!/bin/bash
# Usage: Hadoop伪分布式配置
# History:
#	20140426  annhe  完成基本功能
# Check if user is root
if [ $(id -u) != "0" ]; then
    printf "Error: You must be root to run this script!\n"
    exit 1
fi
#同步时钟
rm -rf /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#yum install -y ntp
ntpdate -u pool.ntp.org &>/dev/null
echo -e "Time: `date` \n"
#默认为单网卡结构,多网卡的暂不考虑
IP=`ifconfig eth0 |grep "inet\ addr" |awk '{print $2}' |cut -d ":" -f2`
#伪分布式
function PseudoDistributed ()
{
	cd /etc/hadoop/
	#恢复备份
	mv core-site.xml.bak core-site.xml
	mv hdfs-site.xml.bak hdfs-site.xml
	mv mapred-site.xml.bak mapred-site.xml
	#备份
	mv core-site.xml core-site.xml.bak
	mv hdfs-site.xml hdfs-site.xml.bak
	mv mapred-site.xml mapred-site.xml.bak
	#使用下面的core-site.xml
	cat > core-site.xml 
<?xml-stylesheet type="text/xsl" href="http://www.annhe.net/configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
	<property>
		<name>fs.default.name</name>
		<value>hdfs://$IP:9000</value>
	</property>
</configuration>
eof
	#使用下面的hdfs-site.xml
	cat > hdfs-site.xml 
<?xml-stylesheet type="text/xsl" href="http://www.annhe.net/configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
	<property>
		<name>dfs.replication</name>
		<value>1</value>
	</property>
</configuration>	
eof
	#使用下面的mapred-site.xml
	cat > mapred-site.xml 
<?xml-stylesheet type="text/xsl" href="http://www.annhe.net/configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
	<property>
		<name>mapred.job.tracker</name>
		<value>$IP:9001</value>
	</property>
</configuration>
eof
}
#配置ssh免密码登陆
function PassphraselessSSH ()
{
	#不重复生成私钥
	[ ! -f ~/.ssh/id_dsa ] && ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
	cat ~/.ssh/authorized_keys |grep "`cat ~/.ssh/id_dsa.pub`" &>/dev/null && r=0 || r=1
	#没有公钥的时候才添加
	[ $r -eq 1 ] && cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
	chmod 644 ~/.ssh/authorized_keys
}
#执行
function Execute ()
{
	#格式化一个新的分布式文件系统
	hadoop namenode -format
	#启动Hadoop守护进程
	start-all.sh
	echo -e "\n========================================================================"
	echo "hadoop log dir : $HADOOP_LOG_DIR"
	echo "NameNode - http://$IP:50070/"
	echo "JobTracker - http://$IP:50030/"
	echo -e "\n========================================================================="
}
PseudoDistributed 2>&1 | tee -a pseudo.log
PassphraselessSSH 2>&1 | tee -a pseudo.log
Execute 2>&1 | tee -a pseudo.log

脚本测试结果

[root@hadoop hadoop]# ./pseudo.sh
14/04/26 23:52:30 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG:   host = hadoop/216.34.94.184
STARTUP_MSG:   args = [-format]
STARTUP_MSG:   version = 1.2.1
STARTUP_MSG:   build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.2 -r 1503152; compiled by 'mattf' on Mon Jul 22 15:27:42 PDT 2013
STARTUP_MSG:   java = 1.7.0_51
************************************************************/
Re-format filesystem in /tmp/hadoop-root/dfs/name ? (Y or N) y
Format aborted in /tmp/hadoop-root/dfs/name
14/04/26 23:52:40 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at hadoop/216.34.94.184
************************************************************/
starting namenode, logging to /var/log/hadoop/root/hadoop-root-namenode-hadoop.out
localhost: starting datanode, logging to /var/log/hadoop/root/hadoop-root-datanode-hadoop.out
localhost: starting secondarynamenode, logging to /var/log/hadoop/root/hadoop-root-secondarynamenode-hadoop.out
starting jobtracker, logging to /var/log/hadoop/root/hadoop-root-jobtracker-hadoop.out
localhost: starting tasktracker, logging to /var/log/hadoop/root/hadoop-root-tasktracker-hadoop.out
========================================================================
hadoop log dir : /var/log/hadoop/root
NameNode - http://192.168.60.128:50070/
JobTracker - http://192.168.60.128:50030/
=========================================================================

通过宿主机上的浏览器访问NameNode和JobTracker的网络接口

namenode

浏览器访问namenode的网络接口

jobtracker

浏览器访问jobtracker网络接口

运行测试程序

将输入文件拷贝到分布式文件系统:

$ hadoop fs -put input input

通过网络接口查看hdfs

browserdirectory

通过NameNode网络接口查看hdfs文件系统

运行示例程序

[root@hadoop hadoop]# hadoop jar /usr/share/hadoop/hadoop-examples-1.2.1.jar wordcount input output

通过JobTracker网络接口查看执行状态

runwordcount

Wordcount执行状态

执行结果

[root@hadoop hadoop]# hadoop jar /usr/share/hadoop/hadoop-examples-1.2.1.jar wordcount input out2
14/04/27 03:34:56 INFO input.FileInputFormat: Total input paths to process : 2
14/04/27 03:34:56 INFO util.NativeCodeLoader: Loaded the native-hadoop library
14/04/27 03:34:56 WARN snappy.LoadSnappy: Snappy native library not loaded
14/04/27 03:34:57 INFO mapred.JobClient: Running job: job_201404270333_0001
14/04/27 03:34:58 INFO mapred.JobClient:  map 0% reduce 0%
14/04/27 03:35:49 INFO mapred.JobClient:  map 100% reduce 0%
14/04/27 03:36:16 INFO mapred.JobClient:  map 100% reduce 100%
14/04/27 03:36:19 INFO mapred.JobClient: Job complete: job_201404270333_0001
14/04/27 03:36:19 INFO mapred.JobClient: Counters: 29
14/04/27 03:36:19 INFO mapred.JobClient:   Job Counters
14/04/27 03:36:19 INFO mapred.JobClient:     Launched reduce tasks=1
14/04/27 03:36:19 INFO mapred.JobClient:     SLOTS_MILLIS_MAPS=72895
14/04/27 03:36:19 INFO mapred.JobClient:     Total time spent by all reduces waiting after reserving slots (ms)=0
14/04/27 03:36:19 INFO mapred.JobClient:     Total time spent by all maps waiting after reserving slots (ms)=0
14/04/27 03:36:19 INFO mapred.JobClient:     Launched map tasks=2
14/04/27 03:36:19 INFO mapred.JobClient:     Data-local map tasks=2
14/04/27 03:36:19 INFO mapred.JobClient:     SLOTS_MILLIS_REDUCES=24880
14/04/27 03:36:19 INFO mapred.JobClient:   File Output Format Counters
14/04/27 03:36:19 INFO mapred.JobClient:     Bytes Written=25
14/04/27 03:36:19 INFO mapred.JobClient:   FileSystemCounters
14/04/27 03:36:19 INFO mapred.JobClient:     FILE_BYTES_READ=55
14/04/27 03:36:19 INFO mapred.JobClient:     HDFS_BYTES_READ=260
14/04/27 03:36:19 INFO mapred.JobClient:     FILE_BYTES_WRITTEN=164041
14/04/27 03:36:19 INFO mapred.JobClient:     HDFS_BYTES_WRITTEN=25
14/04/27 03:36:19 INFO mapred.JobClient:   File Input Format Counters
14/04/27 03:36:19 INFO mapred.JobClient:     Bytes Read=25
14/04/27 03:36:19 INFO mapred.JobClient:   Map-Reduce Framework
14/04/27 03:36:19 INFO mapred.JobClient:     Map output materialized bytes=61
14/04/27 03:36:19 INFO mapred.JobClient:     Map input records=2
14/04/27 03:36:19 INFO mapred.JobClient:     Reduce shuffle bytes=61
14/04/27 03:36:19 INFO mapred.JobClient:     Spilled Records=8
14/04/27 03:36:19 INFO mapred.JobClient:     Map output bytes=41
14/04/27 03:36:19 INFO mapred.JobClient:     Total committed heap usage (bytes)=414441472
14/04/27 03:36:19 INFO mapred.JobClient:     CPU time spent (ms)=2910
14/04/27 03:36:19 INFO mapred.JobClient:     Combine input records=4
14/04/27 03:36:19 INFO mapred.JobClient:     SPLIT_RAW_BYTES=235
14/04/27 03:36:19 INFO mapred.JobClient:     Reduce input records=4
14/04/27 03:36:19 INFO mapred.JobClient:     Reduce input groups=3
14/04/27 03:36:19 INFO mapred.JobClient:     Combine output records=4
14/04/27 03:36:19 INFO mapred.JobClient:     Physical memory (bytes) snapshot=353439744
14/04/27 03:36:19 INFO mapred.JobClient:     Reduce output records=3
14/04/27 03:36:19 INFO mapred.JobClient:     Virtual memory (bytes) snapshot=2195972096
14/04/27 03:36:19 INFO mapred.JobClient:     Map output records=4

查看结果

[root@hadoop hadoop]# hadoop fs -cat out2/*
hadoop  1
hello   2
world   1

也可以将分布式文件系统上的文件拷贝到本地查看

[root@hadoop hadoop]# hadoop fs -get out2 out4
[root@hadoop hadoop]# cat out4/*
cat: out4/_logs: Is a directory
hadoop  1
hello   2
world   1

完成全部操作后,停止守护进程:

[root@hadoop hadoop]# stop-all.sh
stopping jobtracker
localhost: stopping tasktracker
stopping namenode
localhost: stopping datanode
localhost: stopping secondarynamenode

遇到的问题

宿主机不能访问网络接口

因为开启了iptables,所以需要添加相应端口,当然测试环境也可以直接将iptables关闭。

# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 50070 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 50030 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 50075 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

Browse the filesystem跳转地址不对

NameNode网络接口点击Browse the filesystem,跳转到localhost:50075。[2][3]

修改core-site.xml,将hdfs://localhost:9000改成虚拟机ip地址。(上面的脚本已经改写为自动配置为IP)。

根据几次改动的情况,这里也是可以填写域名的,只是要在访问的机器上能解析这个域名。因此公网环境中有DNS服务器的应该是可以设置域名的。

执行reduce的时候卡死

在/etc/hosts中添加主机名对应的ip地址 [4][5]。(已更新Hadoop安装脚本,会自动配置此项)

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
127.0.0.1   hadoop  #添加这一行

参考文献

[1]. Hadoop官方文档.?http://hadoop.apache.org/docs/r1.2.1/single_node_setup.html

[2]. Stackoverflow.?http://stackoverflow.com/questions/15254492/wrong-redirect-from-hadoop-hdfs-namenode-to-localhost50075

[3]. Iteye.?http://yymmiinngg.iteye.com/blog/706909

[4].Stackoverflow.?http://stackoverflow.com/questions/10165549/hadoop-wordcount-example-stuck-at-map-100-reduce-0

[5]. 李俊的博客.?http://www.colorlight.cn/archives/32

 


本文遵从CC版权协定,转载请以链接形式注明出处。
本文链接地址: http://www.annhe.net/article-2682.html
Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Java错误:Hadoop错误,如何处理和避免Java错误:Hadoop错误,如何处理和避免Jun 24, 2023 pm 01:06 PM

Java错误:Hadoop错误,如何处理和避免当使用Hadoop处理大数据时,常常会遇到一些Java异常错误,这些错误可能会影响任务的执行,导致数据处理失败。本文将介绍一些常见的Hadoop错误,并提供处理和避免这些错误的方法。Java.lang.OutOfMemoryErrorOutOfMemoryError是Java虚拟机内存不足的错误。当Hadoop任

Pandas 与 PySpark 强强联手,功能与速度齐飞!Pandas 与 PySpark 强强联手,功能与速度齐飞!May 01, 2023 pm 09:19 PM

​使用Python做数据处理的数据科学家或数据从业者,对数据科学包pandas并不陌生,也不乏像云朵君一样的pandas重度使用者,项目开始写的第一行代码,大多是importpandasaspd。pandas做数据处理可以说是yyds!而他的缺点也是非常明显,pandas只能单机处理,它不能随数据量线性伸缩。例如,如果pandas试图读取的数据集大于一台机器的可用内存,则会因内存不足而失败。另外​pandas在处理大型​数据方面非常慢,虽然有像Dask或Vaex等其他库来优化提升数

在Beego中使用Hadoop和HBase进行大数据存储和查询在Beego中使用Hadoop和HBase进行大数据存储和查询Jun 22, 2023 am 10:21 AM

随着大数据时代的到来,数据处理和存储变得越来越重要,如何高效地管理和分析大量的数据也成为企业面临的挑战。Hadoop和HBase作为Apache基金会的两个项目,为大数据存储和分析提供了一种解决方案。本文将介绍如何在Beego中使用Hadoop和HBase进行大数据存储和查询。一、Hadoop和HBase简介Hadoop是一个开源的分布式存储和计算系统,它可

如何使用PHP和Hadoop进行大数据处理如何使用PHP和Hadoop进行大数据处理Jun 19, 2023 pm 02:24 PM

随着数据量的不断增大,传统的数据处理方式已经无法处理大数据时代带来的挑战。Hadoop是开源的分布式计算框架,它通过分布式存储和处理大量的数据,解决了单节点服务器在大数据处理中带来的性能瓶颈问题。PHP是一种脚本语言,广泛应用于Web开发,而且具有快速开发、易于维护等优点。本文将介绍如何使用PHP和Hadoop进行大数据处理。什么是HadoopHadoop是

PHP中的分布式数据中心PHP中的分布式数据中心May 23, 2023 pm 11:40 PM

随着互联网的快速发展,网站的访问量也在不断增长。为了满足这一需求,我们需要构建高可用性的系统。分布式数据中心就是这样一个系统,它将各个数据中心的负载分散到不同的服务器上,增加系统的稳定性和可扩展性。在PHP开发中,我们也可以通过一些技术实现分布式数据中心。分布式缓存分布式缓存是互联网分布式应用中最常用的技术之一。它将数据缓存在多个节点上,提高数据的访问速度和

探索Java在大数据领域的应用:Hadoop、Spark、Kafka等技术栈的了解探索Java在大数据领域的应用:Hadoop、Spark、Kafka等技术栈的了解Dec 26, 2023 pm 02:57 PM

Java大数据技术栈:了解Java在大数据领域的应用,如Hadoop、Spark、Kafka等随着数据量不断增加,大数据技术成为了当今互联网时代的热门话题。在大数据领域,我们常常听到Hadoop、Spark、Kafka等技术的名字。这些技术起到了至关重要的作用,而Java作为一门广泛应用的编程语言,也在大数据领域发挥着巨大的作用。本文将重点介绍Java在大

使用Redis实现分布式计数器使用Redis实现分布式计数器May 11, 2023 am 08:06 AM

什么是分布式计数器?在分布式系统中,多个节点之间需要对共同的状态进行更新和读取,而计数器是其中一种应用最广泛的状态之一。通俗地讲,计数器就是一个变量,每次被访问时其值就会加1或减1,用于跟踪某个系统进展的指标。而分布式计数器则指的是在分布式环境下对计数器进行操作和管理。为什么要使用Redis实现分布式计数器?随着分布式计算的普及,分布式系统中的许多细节问题也

分布式系统必须知道的一个共识算法:Raft分布式系统必须知道的一个共识算法:RaftApr 07, 2023 pm 05:54 PM

一、Raft 概述​​Raft 算法​​​是分布式系统开发首选的​​共识算法​​。比如现在流行 Etcd、Consul。如果​​掌握​​​了这个算法,就可以较容易地处理绝大部分场景的​​容错​​​和​​一致性​​需求。比如分布式配置系统、分布式 NoSQL 存储等等,轻松突破系统的单机限制。Raft 算法是通过一切以领导者为准的方式,实现一系列值的共识和各节点日志的一致。二、Raft 角色2.1 角色跟随者(Follower):​​普通群众​​,默默接收和来自领导者的消息,当领导者心跳信息超时的

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

PhpStorm versi Mac

PhpStorm versi Mac

Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).

Dreamweaver Mac版

Dreamweaver Mac版

Alat pembangunan web visual

SecLists

SecLists

SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

MinGW - GNU Minimalis untuk Windows

MinGW - GNU Minimalis untuk Windows

Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.