首页 > 代码库 > Hadoop笔记(一)

Hadoop笔记(一)

1.Hadoop要解决2个问题
  海量数据的存储--HDFS
  海量数据的分析--MapReduce


 HDFS的设计目标
 Very large files
 Streaming data access
 Commodity hardware


 HDFS不适合的场景
 Low-latency data access
 Lots of small files
 Multiple writers,arbitrary file modifications


2.宿主机(windows)和客户机(虚拟机中的linux)网络连接方式
 2.1 host-only  宿主机和客户机单独组网
   好处:网络隔离
   坏处:虚拟机与其他服务器之间不能通信
 2.2 bridge桥接 宿主机和客户机在同一个局域网中
    好处:同一个局域网可以互相访问
    坏处:不安全


3.hadoop1.1.2的伪分布安装(最好使用root登录操作)
 3.1 设置静态IP
     在centOS桌面右上角的图标上,右键修改
     重启网卡,执行service network restart
     验证是否成功:执行命令ifconfig
 3.2 修改主机名
     修改当前回话中的主机名为hadoop,执行命令hostname hadoop
     修改配置文件中的主机名为hadoop,执行命令vi /etc/sysconfig/network
     验证:重启机器
 3.3 把hostname和IP绑定
     执行命令vi /etc/hosts,增加一行内容:192.168.80.100 hadoop
     保存退出
     验证:ping hadoop
 3.4 关闭防火墙
     service iptables status查看防火墙
     service iptables  stop 关闭防火墙
     关闭防火墙自动运行:chkconfig iptables off
     验证:chkconfig --list | grep iptables
 3.5 SSH免密码登录
     查看是否安装了openssh: rpm -qa|grep openssh     
     查看SSH状态:chkconfig --list | grep ssh
     启动sshd服务:service sshd start
     免密码登录设置方法
     <1>执行命令 ssh-keygen -t rsa 产生密钥,位于~/.ssh文件夹中
     <2>执行命令 cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
验证:ssh localhost
        (一般登录格式:ssh 用户名@ip)


附:linux下怎么使SSH服务开机自动运行?
<1>首先查看是否安装ssh的相应包
rpm -aq|grep ssh
<2>如果已经安装查看相关的port是否打开
netstat -an|grep 22
<3>设置随机启动
通过ntsysv 选中sshd服务
也可以通过chkconfig也设置
chkconfig -- level 3 sshd on
<4>当这些部分都做好后重新reboot后,还是不能通过ssh联上去。
看一个系统本身的防火设置。
可以手工清空一个规则
iptables -F回车
iptables -t nat -F回车
如果系统端口与sshd服务已启动。
则可以在别的机器上通过ssh连上。


重置SSH公钥:
默认情况下服务器提供的公钥与自己的私钥都放置于 /etc/ssh/ssh_host* 
rm /etc/ssh/ssh_host*
/etc/init.d/sshd restart


 3.6 安装JDK(推荐1.6版本)
     <1>执行命令rm -rf /usr/local/* 删除该目录下所有内容
     <2>使用winscp把jdk等文件从windows复制到/usr/local目录下
     <3>执行命令 chmod u+x jdk-6u45-linux-i586.bin 赋予该文件执行权限
     <4>执行./jdk-6u45-linux-i586.bin解压缩
     <5>执行命令 mv jdk1.6.0_24 jdk1.6 把文件夹重命名为简洁一点的名字
     <6>执行命令 vi /etc/profile 设置环境变量,增加两行内容
             export JAVA_HOME=/usr/local/jdk1.6
             export PATH=.:$JAVA_HOME/bin:$PATH
       保存退出,执行命令source /etc/profile 让设置立即生效
       验证:java -version
 3.7 安装hadoop
     <1>执行命令 tar -zxvf hadoop-1.1.2.tar.gz进行解压缩
     <2>执行命令 mv hadoop-1.1.2 hadoop 重命名
     <3>执行命令 vi /etc/profile设置环境变量
        export HADOOP_HOME=/usr/local/hadoop
        export PATH=.:$HADOOP_HOME/bin:$JAVA_HOME/bin:$PATH
  保存退出,执行命令source /etc/profile 让设置立即生效
     <4>修改hadoop的配置文件,位于$HADOOP_HOME/conf目录下
        修改4个配置文件,分别是hadoop-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml
【hadoop-env.sh的修改内容如下】
 export JAVA_HOME=/你的路径/
【core-site.xml的修改内容如下】 
<configuration>
    <property>
        <name>fs.default.name</name>
        <value>hdfs://hadoop:9000</value>
        <description>change your own hostname</description>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/local/hadoop/tmp</value>
    </property>  
</configuration>
        【hdfs-site.xml的修改内容如下】
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>
【mapred-site.xml 的修改内容如下】
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>hadoop:9001</value>
<description>change your own hostname</description>
</property>
</configuration>
      <5>执行命令hadoop namenode -format 对hadoop进行格式化
      <6>执行命令start-all.sh启动
      <7>验证:(1)执行命令jps,发现5个java进程:NameNode、SecondaryNameNode、JobTracker、TaskTracker、DataNode
         (2)通过浏览器 http://hadoop:50070和http://hadoop:50030


      去除hadoop启动的警告信息:在配置文件增加一个环境变量:export HADOOP_HOME_WARN_SUPPRESS=1
 3.8 NameNode没有启动成功
     (1)没有格式化
     (2)配置文件要记得改主机名
     (3)hostname与IP没有绑定
     (4)SSH的免密码登录没有成功
 3.9 多次格式化hadoop也会错误
     解决方法:删除/usr/local/hadoop/tmp文件夹,重新格式化




4.对HDFS的操作方式
  hadoop fs -help ls 查找ls命令的帮助
  hadoop fs -ls  /查看hdfs的根目录下的内容
  hadoop fs -lsr /递归查看hdfs的根目录下的内容
  hadoop fs -mkdir /zpc 在hdfs上创建文件夹zpc
  hadoop fs -put <linux source path><hdfs destination> 把数据从Linux上传到hdfs的特定路径中
  (如果上传到一个不存在的目录,则会以那个名称为文件名)
  hadoop fs -get <hdfs source path><linux destination> 把数据从hdfs下载到linux的特定路径下
  hadoop fs -text <hdfs下的文件路径> 查看hdfs中的文件
  hadoop fs -rm <文件路径> 删除HDFS中的文件
  hadoop fs -rmr <文件目录路径> 删除HDFS中的文件目录


5.RPC(remote procedure call)
  不同的java进程间的对象方法的调用
  一方称作服务器端(server),一方称作客户端(client)
  server端提供对象,供客户端调用的,被调用的对象的方法的执行发生在server端
  RPC是hadoop框架运行的基础
6.通过RPC例子获得的认识:
  6.1 服务器端提供的对象必须是一个接口,该接口要继承接口VersionedProtocol
  6.2 客户端能够调用的对象中的方法必须位于对象的接口中