Hadoop 学习_ 伪分布式安装

简单介绍 hadoop是什么?

这里写图片描述

下面开始:

  1. 先介绍VM中虚拟机和物理机连接的原理:

    这里写图片描述
      VM(Vmware) 会创建一个虚拟网关,然后VM上的虚拟机和实际的物理机都会得到一个虚拟网卡,这两个网卡都属于同一网段,则 物理机就可以和 虚拟机相互ping通了。电脑真实的网卡与这个没有关系。 虚拟机上网也是借助的实际网卡上网的(具体不太懂)。

2. 下面是物理机和虚拟机连接设置:

2.1 首先是虚拟网关设置(不论是centos还是ubuntu,根据自己需求设定):
这里写图片描述
2.2 然后是虚拟机的IP设置(centos记得在开启页面设置为NAT模式):
这里写图片描述
2.3 最后是电脑上的虚拟网卡设置(VMnet8)(不论是centos还是ubuntu):
这里写图片描述
  这个相当于给物理机分配一个IP,以实现和虚拟机通信。

2.4 检查配置是否正确(即物理机是否能ping通 虚拟机):
这里写图片描述
  在实际使用的过程中,实际只需要让虚拟机的IP和VM分配给物理机的虚拟网卡在同一网段即可。(第一次在配置过程中,配置过程参数和图一样,但是不小心把IP第二个字段都写成 169,但还是成功了,最主要就是这两个)。

3. 在centos上配置Hadoop相关

3.1 通过secureCRT 远程登录 虚拟机:
这里写图片描述
3. 2 设置ubuntu默认启动为 多模式启动:
  因为图形界面比较消耗资源,所以设置为多模式。在这过程中 用普通用户模型进行修改较好,这样防止自己忘了切换,导致后续的修改是在root上进行的。但是为了取得root的权限,在前面加上: sudo 指令。这样使用root权限执行后自动回到一般用户模式。
Centos的设置:
https://blog.csdn.net/jewely/article/details/78067673
这是ubuntu的(好像没具体区分全模式,centos不太一样):
https://blog.csdn.net/u013760355/article/details/79106246
3.3 hadoop是一个集群,太多机器,所以要修改主机名,方便查找:

sudo vim /etc/hosts

这里写图片描述

  修改后要让他生效,一种是重启机器(服务器);另一种是输入:(1)sudo hostname 你起得名字;(2) 重新连接服务器(服务器是没有重启的,相比第一种较快) 。起别名是为了可以直接使用别名登录,不用输入IP地址。因为集群很多机器,单独记IP很难。

3.4 安装具体的JDK和hadoop:
  3.4.1安装JDK:
    在hadoop中很多组件是基于java开发的,所以先安装JDK,后续的一些例子也是java开发,所以先安装java。
    在secureCRT中将本地文件传到虚拟机中的指令是: alt+p,出现一个窗口,输入:put d:\xxx\yy\ll\jdk-7u_65-i585.tar.gz //会放在当前用户家目录
    创建文件夹用来安装:
      mkdir /home/llb/app
    解压:
   tar -zxvf jdk-7u55-linux-i586.tar.gz -C /home/llb/app (解压就是这个-zxvf -C 表示解压后的目录 )
     
    将java添加到环境变量中:
    

        vim /etc/profile
        #在文件最后添加
        export JAVA_HOME=/home/hadoop/app/jdk-7u_65-i585
        export PATH=$PATH:$JAVA_HOME/bin

        #刷新配置
        source /etc/profile

  3.4.2 安装hadoop2.4.1
    先上传hadoop的安装包到服务器上去/home/app/ (安装目录)
    这里写图片描述
    Bin是二进制可执行文件;sbin 系统相关执行脚本,hadoop系统的启动与停止;etc 配置文件;lib、include 本地库;share 因为是java开发的,所以有很多jar包在这里面:
这里写图片描述
    在share的3那里就有很多是hadoop的架构文件。随便进一个,如hdfs:
    这里写图片描述
    
    1是该组件的核心jar包,2是该jar包所依赖的项。
    
4.伪分布式需要修改5个配置文件:
  下面都是 /app/hadoop-2.4.1/etc/hadoop/ 下进行设置。
第一个:hadoop-env.sh

    vim hadoop-env.sh  #外部文件直接vim,不需要超级权限
        #第27行
        export JAVA_HOME=/home/llb/java/jdk1.7.0_65  //经常拿不到java的地址,给他写死。

第二个:core-site.xml

    <!-- 指定HADOOP所使用的文件系统schema(URI),HDFS的老大(NameNode)的地址 -->
        <property>
            <name>fs.defaultFS</name>
            <value>hdfs://weekend-1206-01:9000</value>
        </property>
 /*其中:hdfs://weekend-1206-01:9000
    Hdfs 协议名称;主节点(NameNode)地址:weekend-1206-01主机名(如老是出错就用IP):端口号 
    */

        <!-- 指定hadoop运行时产生文件的存储目录 -->
        <property>
            <name>hadoop.tmp.dir</name>
            <value>/home/llb/app/hadoop-2.4.1/data</value>
      </property>
        //在实际使用过程中应该每个机器配一个文件存储,方便存储。但是注意这个目录是具有tmp属性的,下次启动有个问题,后面会讲。<name>hadoop.tmp.dir</name> 可以修改为data属性。

第三个:hdfs-site.xml hdfs-default.xml
  主要是运行的一些参数:这是存副本防止一台丢失导致损失,一般配三份(真实机器),这里是虚拟机配一份。
  

<!-- 指定HDFS副本的数量 -->
        <property>
            <name>dfs.replication</name>
            <value>1</value>
    </property>

第四个:mapred-site.xml
  没有的话:mv mapred-site.xml.template mapred-site.xml
  

vim mapred-site.xml
   # 指定MapReduce通过 yarn资源调度工具在集群上跑,否则只会在本地跑。
        <!—这一句产生secondname -->
        <property>
            <name>mapred.job.tracker</name>
            <value>llb:9001</value>    # 也是主机名
        </property>

        <!-- 指定mr运行在yarn上 -->
        <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
        </property>

第五个:yarn-site.xml

   <!-- 指定YARN的老大(ResourceManager)的地址 -->
        <property>
            <name>yarn.resourcemanager.hostname</name>
            <value>weekend-1206-01</value>
      </property>
      // weekend-1206-01 主机名
        <!-- reducer获取数据的方式(配置从节点) -->
      <property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value> 
      </property>
      // mapreduce_shuffle 表示从节点产生的中间节点怎么传给主节点(目前只有这一种,但必须写)。

  注意:因为hadoop都是网络服务,端口会被Linux防火墙禁止,可以把这些端口添加到Linux中,比较麻烦;还有就是把Linux防火墙关闭,因为都是在内网操作,不与外部接触,可以关闭Centos7 查看关闭防火墙: https://blog.csdn.net/pucao_cug/article/details/71758883
  
4.1启动前将hadoop添加到环境变量

        Sudo    vim /etc/proflie
        export JAVA_HOME=/usr/java/jdk1.7.0_65
        export HADOOP_HOME=/itcast/hadoop-2.4.1
        export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

        source /etc/profile  //刷新配置文件

4.2 格式化namenode(是对namenode进行初始化):

hdfs namenode -format (hadoop namenode –format   //这个是老命令)

  若此时出现 ./java: /lib/ld-linux.so.2: bad ELF interpreter: 是因为jDK的版本原因:
https://blog.csdn.net/w616589292/article/details/39697557 解决。若还出错,看下具体错在什么地方,一步步的去改。
  成功标志:Storage directory /home/llb/app/hadoop-2.4.1/data/dfs/name has been successfully formatted.(这个目录是我们创建的,只要成功就配置成功。)
  注意:一般情况下hadoop开启后是不容易关机的,同时,namedata和datanode目录是tmp属性,下次启动会重新生成,导致namenoda没有或者datanode没有。
  解决办法:
  删除 /home/llb/app/hadoop-2.4.1/ 目录下的data,重新格式化,然后依次启动hdfs(可能namenode或datanode有一个没启动,再一次启动hdfs就有了)和yarn(可以不启动,因为只有一台机器)。另外,存储文件都是在tmp属性的data目录下,只要一旦关机就所有配置没有了,所有存储文件也没有了。
  
4.3 下次启动直接从这里开始,上面是安装和配置
  若某些节点没有成功(总共5个进程,不包括 jps。可用jps查看当前hadoop进程),返回上几行的解决办法。
  

       先启动HDFS (sbin/ 下)
        start-dfs.sh

        再启动YARN(sbin/)
        start-yarn.sh
        ( start-all.sh 表示启动全部,初学者千万不要启动这个,这样学的不好。 .cmd表示windows环境)

        验证是否启动成功(使用jps命令验证):

        27408 NameNode
        28218 Jps
        27643 SecondaryNameNode
        28066 NodeManager
        27803 ResourceManager  //2806627803这两个是启动yarn后得到的
        27512 DataNode

4.4 杂谈:
http://192.168.2.103:50070 (HDFS管理界面,可以查看服务器上的节点信息,还可以直接在上面下载文件)
这里写图片描述
  红色里面的显示服务器上hdfs上的文件,可以直接下载。
示列: 在centos界面 :
 hadoop fs –put 文件 hdfs://192.168.2.103:9000/
  (就配置时写的hdfs配置的文件端口号,这样hadoop上就有了)
这里写图片描述
  从上面取到本地机器:
  1)直接用浏览器;
  2)hadoop fs –get hdfs://192.168.2.103:9000/文件 目录
  
  里面有一个例子程序(hadoop-mapreduce-examples-2.4.1.jar),可以统计单词,和计算圆周率,我们用这个做一下。
统计词:(centos)
  1.创建目录,上传文件的前缀: hadoop fs –指令
     Hadoop fs –mkdir /wordcount  //fs表示是在hdfs服务器上,/表示hdfs上的根目录,这里直接创建一个目录。
Hadoop fs –mkdir /wordcount/input
  2.Hadoop fs –put wordcount.txt /wordcount/input  //将文件wordcount.txt上传指定目录
  3.执行MapReduce指令: Hadoop jar 指令jar包 参数
例如:
 hadoop jar hadoop-mapreduce-examples-2.4.1.jar wordcount(给指定程序指明哪个类) /wordcount/input(输入数据目录) /wordcount/output(输出数据目录,可自动创建)
  查看结果:
    1) 去浏览器 ;
    2)指令:hadoop fs – 其实hadoop指令和centos的差不多。
这里写图片描述

下面是hdfs的一些原理:
这里写图片描述
  我们在访问hdfs时,相当于客户端,每台DataNode机器本身是用Linux程序运行的,他本身是EXT3文件系统,上面也装了hadoop,用户存入数据后,hdfs将文件切成小块,放了一块在这个datanode中,目录就是图片中hadoop中的目录(这个目录是装hadoop时配置的)。注意:我们在客服端指定的目录和浏览器访问的目录是虚拟的一个目录,方便用户访问,实际是存在很多台机器上,由namenode进行映射查找。
这里写图片描述
  用户存入数据后:hdfs自动将文件切成小块,并放入各个机器中(按机器容量自动分配),并会在namenode中存储那一块放到那个机器中,并在每个机器中随机备份每一小块。
  用户进行读取时:先去虚拟目录读取,hdfs后台是这样操作的:先访问namenode,查找文件在哪些机器中存储,进而去对应的机器读取文件。当多个用户提取同一个文件时,可以从备份机器中提取,这也是机器提取比较快的地方,可以提高吞吐量。
这里写图片描述
这里写图片描述
-表示是文件,d表示目录,1表示文件备份数为1.目录是没有备份的。

4.配置ssh免登陆:
  在启动机器中启动一台就要输密码,这里是伪分布式所以只输一次,若启动多台,则要输很多次,不现实,可以设置免密登录)。没有图形界面内存512M就够了。
   #生成ssh免登陆密钥,进入到我的home目录
   

    ssh-keygen -t rsa (四个回车,不用输密码等,四个回车解决)

  执行完这个命令后,会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥),以及.ssh目录,存储上面的秘钥,后面的授权文件也放这里面。
   这里写图片描述

//将公钥拷贝到要免登陆的机器上
   cd ~/.ssh
    Scp id_rsa.pub 主机名(或192.168.2.100):/home/llb/

  注意用别名时,本台机器中要配置 免密登陆机器的IP和别名设置,免密登录中也要设置本台机器和别名,否则用绝对的IP地址。
  把公钥拷贝给自己,自己就可以免登陆自己。不论是给自己还是别人,创建一个authorized_keys(授权文本,文件名不能改,指令: touch authorized_keys),在 /home/llb/.ssh/ 下, 文件的权限必须是600. 指令: chmod 600 authorized_keys .
  自己授权自己:cat id_rsa.pub >> ./authorized_keys #这个公钥是自己机器的。
  如果要免密码登陆别的机器,就需要将自己的公钥拷贝给对应机器直接使用:
  这个使用追加的方式拷贝到文件中:
   cat ../id_rsa.pub >> ./authorized_keys
   注意这个秘钥是别的机器的,即a步别的机器拷贝过来的。
测试 (在secureCRT):
   ssh itcast01(或者绝对IP)
   
Ssh客户端的内部原理:

   这里写图片描述
   黑色的箭头是需要我们第一次授权需要做的,绿色是ssh客户端内部的实现原理。

猜你喜欢

转载自blog.csdn.net/qq_15220357/article/details/80681658