• Hadoop伪分布式系统的搭建(ubuntu)


    相关软件下载

    一、安装虚拟机软件VirtualBox

    二、使用VirtualBox新建虚拟机并安装Ubuntu系统

      提示:最小安装即可

    三、创建一个新账户

      1、使用CTRL+ALT+T打开命令行终端,输入命令创建新用户

        sudo useradd -m hadoop -s /bin/bash  

        说明:-m表示自动创建用户目录(/home/hadoop),hadoop是用户名,-s表示使用/bin/bash作为shell

      2、给新用户设置密码

        sudo passwd hadoop

        说明:输入两次新密码

      3、给新用户增加管理员权限

        sudo adduser hadoop sudo

      4、注销当前用户,并以新用户登录

    四、在Ubuntu中挂载共享文件夹

      1、“设备”->“共享文件夹”,记住共享文件夹的共享名

      2、“设备”->“安装增强功能“

        说明:安装好了,桌面上会出现光盘图标VBox_GAs_5.2.18和一个虚拟盘sf_VirtualBoxShare

      3、进入目录/media/hadoop/VBox_GAs_5.2.18,执行命令./VBoxLinuxAddtion.run

      4、将共享文件夹挂载到Ubuntu的一个文件夹

        (1)创建挂载的目标文件夹

          mkdir  ~/share

        (2)挂载

          格式:mount -t vboxsf 共享名 本地目录

          mount -t vboxsf VirtualBoxShare  ~/share

          说明:VirtualBox是共享文件夹的共享名,share目录需要事先在家目录(~,即/home/hadoop) 下创建

      5、设置vbox共享粘贴板

        “设备”->“共享粘贴板”->“双向“

        说明:这样在真机和虚拟机之间可以任意的复制和粘贴。

      更正:

      1.安装增强功能

      2.设置共享文件夹

        桌面上会增加"sf_共享名"文件夹  //只有root用户才能访问,进入下一步修改

      3.将当前用户添加至vboxsf用户组

        sudo usermod -a -G vboxsf hadoop  //当前用户是hadoop,需重启

    五、安装一些必要的工具

      1、更新apt-get

        sudo apt-get update

        说明:apt-get是用来安装软件的工具

      2、安装ssh服务

        apt-get install openssh-server

        说明: ssh是机器之间远程登录的服务

      3、安装vim

        apt-get install vim 

        说明:vim是Linux下常用的文本编辑器,Ubuntu也有自带的文本编辑器gedit

    六、配置免密登录

      1、禁用防火墙  

        ufw disable  

        ufw status //查看防火墙状态

      2、生成密钥对

        cd  ~/.ssh

        ssh-keygen  -t  rsa

        说明:一路回车,在~/.ssh目录会生成一个两个文件,id_rsa和id_rsa.pub

      3、将公钥复制到localhost

        ssh-copy-id localhost

        说明:也可cat  ./id_rsa.pub >> ./authorized_keys,这样~/.ssh目录又会多一个文件authorized_keys

      4、登录测试  

        ssh localhost

        说明:看是否需要输入密码  

      5、退出与localhost的连接

        exit

    七、安装并配置jdk

      1、在家目录(~)下新建/app 文件夹

        mkdir  ~/app

         说明:后面的jdk、hadoop等都安装在此

      2、在真机中将jdk、hadoop的安装包复制到真机的共享文件夹中

      3、安装jdk

        tar  -zxvf  ~/share/jdk-8u181-linux-x64.tar.gz  -C  ~/app  //解压

        mv  ~/app/jdk1.8.0_181   ~/app/jdk   //改名

      4、配置jdk

      (1)编辑配置文件.bashrc

        vim  ~/.bashrc

          export JAVA_HOME=/home/hadoop/app/jdk
          export JRE_HOME=$JAVA_HOME/jre
          export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib
          export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

      (2) 编译配置文件

        source  ~/.bashrc

      (3)测试jdk

        java -version

    八、安装hadoop

      1、安装hadoop

        tar  -zxvf  ~/share/hadoop-2.7.3.tar.gz  -C  ~/app  //解压

        mv  ~/app/hadoop-2.7.3   ~/app/hadoop  //改名

      2、配置hadoop

        (1)配置环境变量

          vim ~/.bashrc,添加或修改以下语句:

            export HADOOP_HOME=/app/hadoop //添加
            export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin //修改

          source  ~/.bashrc //编译生效

        (2)配置hadoop-env.sh

          vim ~/app/hadoop/etc/hadoop/hadoop-env.sh

            找到export JAVA_HOME=${JAVA_HOME}这一行,将其修改为:
            export JAVA_HOME=/home/hadoop/app/jdk

        (3)配置core-site.xml   

          <configuration>
            <property>
              <name>fs.defaultFS</name>
              <value>hdfs://localhost:9000</value>
            </property>
            <property>
              <name>hadoop.tmp.dir</name>
              <value>/home/hadoop/app/hadoop/tmp</value>  <!--该目录需要手动创建 -->
            </property>
          </configuration>

        (4)配置hdfs-site.xml    

          <configuration>
            <property>

              <!--配置块的副本数 -->
              <name>dfs.replication</name>
              <value>1</value>
            </property>
          </configuration>

        (5)配置mapred-site.xml

          说明:需将mapred-site.xml.template复制成mapred-site.xml,并配置内容如下:

          <configuration>
            <property>
              <name>mapreduce.framework.name</name>
              <value>yarn</value>
            </property>
          </configuration>

        (6)配置yarn-site.xml

          <configuration>

            <property>
              <name>yarn.nodemanager.aux-services</name>
              <value>mapreduce_shuffle</value>
            </property>
          </configuration>

    九、运行hadoop

      1、格式化namenode

        hadoop namenode -format

        说明:

          首次运行须格式化,以后运行就不需要这一步。

          格式化后会在core-site.xml中hadoop.tmp.dir所指定的目录中生成name文件夹。

      2、运行hadoop

        cd ~/app/hadoop/sbin

        ./start-all.sh

      3、查看进程:

        jps     

          14262 NameNode
          15976 NodeManager
          14385 DataNode
          15884 ResourceManager
          14601 SecondaryNameNode
          16120 Jps
         如果出现以上进程,说明hadoop环境搭建成功,分布式系统启动完成。  

      4、webUI查看

        http://localhost:50070   //查看hdfs

        http://localhost:8088  //查看mapreduce作业情况

    十、测试wordcount程序

      1、生成单词文件

        mkdir  ~/tmp
        echo 'hello world hello hadoop' >  ~/tmp/word1.txt
        echo 'hive run on hadoop' >  ~/tmp/word2.txt  

      2、上传至hdfs

        (1)在hdfs上新建输入数据的目录
          hdfs dfs -mkdir /input
        (2)上传文件

          hdfs dfs -put  /tmp/word*.txt  /input

      3、运行hadoop自带的单词计数程序  

        hadoop jar  ~/app/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /input output

      4、查看结果

        hdfs dfs -cat /user/hadoop/output/part-r-00000
        可以看到每个单词出现的次数

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------

    安装hive

     

      1、解压

        tar -zxvf ~/share/apache-hive-2.1.0-bin.tar.gz -C  ~/app

      2、设置环境变量

        vim ~/.bashrc

          HIVE_HOME=/home/hadoop/app/hive

          export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin

      3、配置hive-env.sh

        cd ~/app/hive/conf

        cp hive-env.sh.template hive-env.sh

        vim hive-env.sh     

          HADOOP_HOME=/home/hadoop/app/hadoop

       4、配置hive-site.xml

        cd ~/app/hive/conf

        cp hive-site.xml.template hive-site.xml

        vim hive-site.xml      

          <property>

            <name>hive.querylog.location</name>

             <value>/home/centosm/hive/hivelog</value>

            <description>Location of Hive run time structured log file</description>

          </property> 

          <property>
            <name>hive.exec.local.scratchdir</name>
            <value>/home/hadoop/app/hive/hivelog</value>
            <description>Local scratch space for Hive jobs</description>
          </property>
          <property>
            <name>hive.downloaded.resources.dir</name>
            <value>/home/hadoop/app/hive/hivelog</value>
            <description>Temporary local directory for added resources in the remote file system.</description>
          </property>

        5、初始化derby数据库

          cd ~/app/hive/bin

          schematool -initSchema -dbType derby

        6、运行hive

          $HADOOP_HOME/sbin/start-all.sh  //先启动hadoop

          $HIVE_HOME/bin/hive  //启动hive

    ------------------------------------------------------------------------------------------------

    hive 外模式mysql的安装

      1、安装mysql

        (1)安装mysql-server

          $>apt-get install mysql-server

        (2)在mysql中添加hadoop用户

          a.创建用户

            msql>create user hadoop@localhost identified by 'hadoop';

          b.授予hadoop用户访问hive数据库的所有权限

            mysql>grant all privileges on hive to hadoop@localhost identified by 'hadoop';

          c.刷新权限

            mysql>flush privileges;

        (3)登录mysql

          hadoop@Ubuntu01:~$mysql -u hadoop -phadoop

      2、下载并复制jdbc的连接jar包

        如:mysql-connector-java-5.1.47.jar,将其复制$HIVE_HOME/lib中

      3、修改hdfs-site.xml 

        <!-- mysql驱动 -->

        <property>
          <name>javax.jdo.option.ConnectionDriverName</name>
          <value>com.mysql.jdbc.Driver</value>
        </property>

        <!-- mysql连接url-->

        <property>
          <name>javax.jdo.option.ConnectionURL</name>
          <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true&amp;characterEncoding=UTF-8&amp;useSSL=false</value>
        </property>

        <!-- 用户名-->

        <property>
          <name>javax.jdo.option.ConnectionUserName</name>
          <value>hadoop</value>
        </property>

        <!-- 密码 -->

        <property>
          <name>javax.jdo.option.ConnectionPassword</name>
          <value>hadoop</value>
        </property>

      4、初始化hive

        [$HIVE_HOME/bin]

        schematool -initSchema -dbType mysql

      5、客户端连接hive

        客户端程序是不能直接访问hive的,必须先开启hiveserver2服务,然后通过hiveserver2连接hive。

        (1)启动hiveserver2

          $>$HIVE_HOME/bin/hiveserver2 &  //在后台运行

          $>jobs  //查看作业

          $>netstat -ano | grep 10000  //hiveserver2的端口为10000

          注:若要停止hiveserver2,可使用命令:hiveserver2 stop。若还不行,则杀死进程:kill -9 <pid>

          使用beeline连接hiveserver2

            $>beeline -u jdbc:hive2://localhost:10000/mydb -n hadoop -phadoop

            说明:$HIVE_HOME/lib下需要hive-jdbc-2.1.0-standalone.jar

        (2)修改core-site.xml

          hive2新加了权限,需修改hadoop的配置文件

          [$HADOOP_HOME/etc/hadoop/core-site.xml]   

            <property>         
              <name>hadoop.proxyuser.hadoop.hosts</name>         
              <value>*</value>        
            </property>       
             <property>        
              <name>hadoop.proxyuser.hadoop.groups</name>     
              <value>*</value>
            </property>    

        (3)编写java程序
          a.安装并配置maven

            [~/.bashrc]

              export M2_HOME=/home/hadoop/app/maven

              export PATH=...:$M2_HOME/bin

            [$M2_HOME/conf/setting.xml]

              <!-- 修改本地仓库的位置 -->

              <localRepository>/home/hadoop/app/maven/local_repository</localRepository> 

              <!-- 将maven仓库的默认镜像修改为阿里云 -->

              <mirrors>
                   <mirror>
                     <id>aliyun</id>
                    <name>aliyun Maven</name>
                    <mirrorOf>*</mirrorOf>
                    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
                  </mirror>
                </mirrors>

          b.修改eclipse中的maven配置

            Windows->Preference->Maven->User Settings->Global Settings->修改为$M2_HOME/conf/settings.xm,其中$M2_HOME为maven的主目录

          c.新建maven项目

            修改pom.xml,新增一个包依赖  

            [pom.xml]

              <dependency>
                <groupId>org.apache.hive</groupId>
                <artifactId>hive-jdbc</artifactId>
                <version>2.1.0</version>
              </dependency>

            注意:此处的hive-jdbc的版本必须和你的hive版本一致。

          3.新建java文件

            [hive-jdbc.java]

              

    package com.zyz;
    
    import java.sql.*;
    
    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;
    
    public class HiveJDBC {
        // 连接
            private Connection connection = null;
            private PreparedStatement ps = null;
            private ResultSet rs = null;
    
            /**
             * 测试前准备工作
             */
            @Before
            public void before() {
                try {
                    // Hive的JDBC驱动
                    String classDriver = "org.apache.hive.jdbc.HiveDriver";
                    // 连接串,接数据库名mydb,数据库写你的数据库
                    String url = "jdbc:hive2://localhost:10000/mydb";
                    // 加载驱动
                    Class.forName(classDriver);
                    // 获得连接
                    connection = DriverManager.getConnection(url,"hadoop","hadoop");
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
    
            /**
             * 查询表中的数据
             */
            @Test
            public void testSelect() {
                try {
                    // 表和数据需要提前准备好
                    String sql = "select * from heros";
                    // 执行SQL语句
                    ps = connection.prepareStatement(sql);
                    // 得到结果集
                    rs = ps.executeQuery();
                    // 遍历结果集
                    while (rs.next()) {
                        System.out.println(rs.getInt(1) + " " + rs.getString(2) + " " + rs.getString(3));
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
                System.out.println("over...");
            }
            
            /*
             * 插入记录
             * 
             */
            @Test
            public void TestInsert() {
                // TODO Auto-generated method stub
                String sql="insert into player values(?,?,?)";
                try {
                    ps=connection.prepareStatement(sql);
                    ps.setInt(1, 9);
                    ps.setString(2, "park");
                    ps.setString(3, "spus");
                    ps.executeUpdate();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                System.out.println("ok!");
            }
    
            
            /*
             * 
             *建表
             */
            
            @Test
            public void TestCreateTable() {
                // TODO Auto-generated method stub
                String sql="create table heros(id int,name string,country string)";
                try {
                    ps=connection.prepareStatement(sql);
                    ps.execute();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                System.out.println("ok...");
            }
    
            /**
             * 测试结束后关闭连接
             */
            @After
            public void after(){
                try {
                    if (ps != null)
                        ps.close();
                    if (rs != null)
                        rs.close();
                    connection.close();
                }catch (Exception e){
                    e.printStackTrace();
                }
            }
    }

            

            

      

          

     附:

    -------------------------------------------------------------------------------------------------

    1、Ubuntu 遭遇 无法打开锁文件 /var/lib/dpkg/lock - open (13: 权限不够)

    sudo rm /var/lib/dpkg/lock

    sudo rm /var/cache/apt/archive/lock

     

  • 相关阅读:
    Excel导出工具
    载入Properties文件中的配置项信息
    对list进行排序-重写排序规则
    Mysql 5.7版本报错 1055
    SVN客户端与服务端安装详解
    持续集成的理解
    js 日期格式化
    mysql多个时间戳字段默认值问题
    eclipse svn插件地址
    orientationchange移动端横竖屏切换属性
  • 原文地址:https://www.cnblogs.com/beast-king/p/9687444.html
Copyright © 2020-2023  润新知