hadoop从安装到布署
2016-03-29 12:46
501 查看
检查是否安装JDK
$ java -version
若没有就安装JDK(可把压缩包放在/usr/lib/java中解压),之后添加环境变量
$ export JAVA_HOME=/path to jdk
$ export PATH=$JAVA_HOME/bin:$PATH
值得注意的是,上面的命令只对当前正在运行的shell起作用,一旦注销用户、关闭shell或重启系统之后会失效。要确保相同的设置始终有效,可以把这些设置添加到shell启动文件。对于Bash Shell来说,那就是.bash_profile文件。当然,为避免shell启动过程过于复杂,可把相关配置放入一个单独的文件,然后从命令行显式调用此文件,如:
$ source ini-hadoop-config.sh
对于CentOS,就执行vim ~/.bashrc,增加配置内容,然后source ~/.bashrc
下载HADOOP并配置环境变量
$ export HADOOP_HOME=/path to hadoop
$ export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
进入hadoop安装路径的etc/hadoop目录,编辑hadoop-env.sh、yarn-env.sh文件。搜索JAVA_HOME并取消那行注释,修改为JDK的安装路径。在相同的目录下找到slaves文件,去掉“”localhost”,每行添加一个主机名,行末没有任何符号。这样写入所有从节点主机名或IP。最后让配置文件生效
$ source hadoop-env.sh
$ source yarn-env.sh
添加hadoop用户、创建空口令Secure Shell(SSH)的密钥对
$ useradd hadoop
$ passwd hadoop
$ vim /etc/sudoers然后增加这个条目:hadoop
ALL=(ALL) ALL
$ ssh-keygen -t rsa -P ''
复制新生成的公钥至已授权秘钥列表
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 600 authorized_keys
确认信任主机证书,之后再连接则不需要密码
$ ssh localhost
$ chown -R hadoop:hadoop /usr/hadoop
若使用一个完全分布式的集群,需要确保集群中每台机器的hadoop用户具有相同的密钥设置。将master上的authorized_keys放到其他linux主机的~/.ssh目录下。
$ sudo scp ~/.ssh/authorized_keys hadoop@slave1:~/.ssh
如果不进行任何配置,hadoop以本地独立模式运行,也就是说所有组件都运行在一个进程中。而伪分布式模式是让每个组件运行在不同的Java虚拟机中,它们之间通过socket通信。
按如下步骤配置成伪分布式,core-site.xml文件的configuration节点内增加内容:
完全分布式的配置类似如下
同样地,修改hdfs-site.xml文件中的configuration节点:
完全分布式的配置类似如下
对于mapred-site.xml.template文件,给出了模板,先拷贝得到mapred-site.xml。要运行在yarn上,可按如下方式修改:
完全分布式的配置类似如下
对于yarn-site.xml文件
完全分布式的配置类似如下
启动之前最好执行设置存储hadoop文件的根目录(假如是/var/lib/hadoop),可让作何用户都能在此目录写入数据:
$ chmod 777 /var/lib/hadoop
首次启动Hadoop之前,都需要格式化HDFS文件系统
$ bin/hdfs namenode -format
启动Hadoop、使用HDFS
$ sbin/start-dfs.sh
所有节点采用相同的配置文件和安装目录,直接把master上面的所有hadoop目录copy到slave1,slave2,slave3上面去。
然后可以打开hadoop的监控页面查看状态:http://localhost:50070(MapReduce)或50030(HDFS)。这些Web页面很可能是诊断作业开始缓慢地运行或出现了明显的失败问题的第一站,因为该接口提供的丰富信息是调查正在运行的作业和已完成作业的入手点。
如果namenode没有启动,而secondarynamenode被启动,则停止服务,重新格式化
bin/hdfs namenode -format
接着来测试、操作文件系统上的文件和目录
hadoop为每个用户保留一个主目录,这些主目录都位于HDFS上的/user路径下,若你的主目录不存在,则需要自己创建。未带参数的-ls命令会指定用户主目录,相对路径(不是以/开关)也是相对那个位置。
$ bin/hdfs dfs -mkdir /user $ bin/hdfs dfs -mkdir /user/<username>
$ bin/hdfs dfs -ls /user
$ echo "this is a test." >> test.txt
$ bin/hdfs dfs -copyFromLocal test.txt
$ bin/hdfs dfs -ls
$ bin/hdfs dfs -cat test.txt
$ rm test.txt
$ bin/hdfs dfs -copyToLocal test.txt
执行MapReduce作业
$ bin/hdfs dfs -put etc/hadoop input
不能把一个已存在的目录指定为Hadoop作业的的输出路径,这是一种安全机制,防止用户重写有用的文件。当然也可以覆盖这种方式。
$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.4.jar grep input output 'dfs[a-z.]+'
从分布式文件系统中取出文件放到本地文件系统
$ bin/hdfs dfs -get output output
$ cat output/*
$ java -version
若没有就安装JDK(可把压缩包放在/usr/lib/java中解压),之后添加环境变量
$ export JAVA_HOME=/path to jdk
$ export PATH=$JAVA_HOME/bin:$PATH
值得注意的是,上面的命令只对当前正在运行的shell起作用,一旦注销用户、关闭shell或重启系统之后会失效。要确保相同的设置始终有效,可以把这些设置添加到shell启动文件。对于Bash Shell来说,那就是.bash_profile文件。当然,为避免shell启动过程过于复杂,可把相关配置放入一个单独的文件,然后从命令行显式调用此文件,如:
$ source ini-hadoop-config.sh
对于CentOS,就执行vim ~/.bashrc,增加配置内容,然后source ~/.bashrc
下载HADOOP并配置环境变量
$ export HADOOP_HOME=/path to hadoop
$ export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
进入hadoop安装路径的etc/hadoop目录,编辑hadoop-env.sh、yarn-env.sh文件。搜索JAVA_HOME并取消那行注释,修改为JDK的安装路径。在相同的目录下找到slaves文件,去掉“”localhost”,每行添加一个主机名,行末没有任何符号。这样写入所有从节点主机名或IP。最后让配置文件生效
$ source hadoop-env.sh
$ source yarn-env.sh
添加hadoop用户、创建空口令Secure Shell(SSH)的密钥对
$ useradd hadoop
$ passwd hadoop
$ vim /etc/sudoers然后增加这个条目:hadoop
ALL=(ALL) ALL
创建密钥
公钥和密钥是两份文件,服务端持有公钥,用来加密;客户端持有密钥,用来解密。客户端向服务端发起连接请求时,服务端会生成一串随机数,经过公钥加密后传给客户端。这时客户端会用密钥解密获取随机数,再返回服务端。最后服务端判断一下,如果客户端能够返回正确的随机数,就认为校验通过了。使用公钥认证,就只需要把自己生成的公钥发给管理员,而不需要管理员把服务器的用户密码告诉每一个人$ ssh-keygen -t rsa -P ''
复制新生成的公钥至已授权秘钥列表
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 600 authorized_keys
确认信任主机证书,之后再连接则不需要密码
$ ssh localhost
$ chown -R hadoop:hadoop /usr/hadoop
若使用一个完全分布式的集群,需要确保集群中每台机器的hadoop用户具有相同的密钥设置。将master上的authorized_keys放到其他linux主机的~/.ssh目录下。
$ sudo scp ~/.ssh/authorized_keys hadoop@slave1:~/.ssh
如果不进行任何配置,hadoop以本地独立模式运行,也就是说所有组件都运行在一个进程中。而伪分布式模式是让每个组件运行在不同的Java虚拟机中,它们之间通过socket通信。
按如下步骤配置成伪分布式,core-site.xml文件的configuration节点内增加内容:
<property> <!-- NameNode的位置--> <name>fs.default.name</name> <value>hdfs://localhost:9000</value> </property> <property> <!-- 文件根目录--> <name>hadoop.tmp.dir</name> <value>/usr/local/hadoop/tmp</value> </property>
完全分布式的配置类似如下
<configuration> <property> <name>fs.default.name</name> <value>hdfs://192.168.7.141 :9000</value> </property> <property> <name>io.file.buffer.size</name> <value>131072</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/ hadoop/tmp</value > <description>A base for other temporary directories.</description> </property> <property> <name>hadoop.proxyuser.hduser.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.hduser.groups</name> <value>*</value> </property> </configuration>
同样地,修改hdfs-site.xml文件中的configuration节点:
<property> <name>dfs.replication</name> <value>1</value> </property>
完全分布式的配置类似如下
<configuration> <property> <name>dfs.namenode.secondary.http-address</name> <value>master:9001</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/usr/local/hadoop/name</value> </pr c574 operty> <property> <name>dfs.datanode.data.dir</name> <value>file:/usr/local/hadoop/data</value> </property> <property> <name>dfs.replication</name> <value>4</value> <description>storage copy number</description> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> </configuration>
对于mapred-site.xml.template文件,给出了模板,先拷贝得到mapred-site.xml。要运行在yarn上,可按如下方式修改:
<property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapred.job.tracker</name> <value>localhost:9001</value> </property>
完全分布式的配置类似如下
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>master:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>master:19888</value> </property> <property> <name>mapred.job.tracker</name> <value>master:9001</value> <description>JobTracker visit path</description> </property> </configuration>
对于yarn-site.xml文件
<property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property>
完全分布式的配置类似如下
<configuration>
<property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
</configuration>
启动之前最好执行设置存储hadoop文件的根目录(假如是/var/lib/hadoop),可让作何用户都能在此目录写入数据:
$ chmod 777 /var/lib/hadoop
首次启动Hadoop之前,都需要格式化HDFS文件系统
$ bin/hdfs namenode -format
启动Hadoop、使用HDFS
$ sbin/start-dfs.sh
所有节点采用相同的配置文件和安装目录,直接把master上面的所有hadoop目录copy到slave1,slave2,slave3上面去。
然后可以打开hadoop的监控页面查看状态:http://localhost:50070(MapReduce)或50030(HDFS)。这些Web页面很可能是诊断作业开始缓慢地运行或出现了明显的失败问题的第一站,因为该接口提供的丰富信息是调查正在运行的作业和已完成作业的入手点。
如果namenode没有启动,而secondarynamenode被启动,则停止服务,重新格式化
bin/hdfs namenode -format
接着来测试、操作文件系统上的文件和目录
hadoop为每个用户保留一个主目录,这些主目录都位于HDFS上的/user路径下,若你的主目录不存在,则需要自己创建。未带参数的-ls命令会指定用户主目录,相对路径(不是以/开关)也是相对那个位置。
$ bin/hdfs dfs -mkdir /user $ bin/hdfs dfs -mkdir /user/<username>
$ bin/hdfs dfs -ls /user
$ echo "this is a test." >> test.txt
$ bin/hdfs dfs -copyFromLocal test.txt
$ bin/hdfs dfs -ls
$ bin/hdfs dfs -cat test.txt
$ rm test.txt
$ bin/hdfs dfs -copyToLocal test.txt
执行MapReduce作业
$ bin/hdfs dfs -put etc/hadoop input
不能把一个已存在的目录指定为Hadoop作业的的输出路径,这是一种安全机制,防止用户重写有用的文件。当然也可以覆盖这种方式。
$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.4.jar grep input output 'dfs[a-z.]+'
从分布式文件系统中取出文件放到本地文件系统
$ bin/hdfs dfs -get output output
$ cat output/*
相关文章推荐
- 详解HDFS Short Circuit Local Reads
- Hadoop_2.1.0 MapReduce序列图
- 使用Hadoop搭建现代电信企业架构
- 单机版搭建Hadoop环境图文教程详解
- hadoop常见错误以及处理方法详解
- hadoop 单机安装配置教程
- hadoop的hdfs文件操作实现上传文件到hdfs
- hadoop实现grep示例分享
- Apache Hadoop版本详解
- linux下搭建hadoop环境步骤分享
- hadoop client与datanode的通信协议分析
- hadoop中一些常用的命令介绍
- Hadoop单机版和全分布式(集群)安装
- 用PHP和Shell写Hadoop的MapReduce程序
- hadoop map-reduce中的文件并发操作
- Hadoop1.2中配置伪分布式的实例
- hadoop上传文件功能实例代码
- java结合HADOOP集群文件上传下载
- 让python在hadoop上跑起来
- 用python + hadoop streaming 分布式编程(一) -- 原理介绍,样例程序与本地调试