• hive安装


    		hive安装
    (1)tar -zxf hive-0.7.1-bin.tar.gz
    (2)mv hive-0.7.1-bin /usr/local/hive
    (3)vim hive-config.sh
    export HADOOP_HOME=/usr/local/hadoop/hadoop-0.20.204.0/
    export JAVA_HOME=/usr/java/jdk1.6.0_27
    export HIVE_HOME=/usr/local/hive
    (4)cd /usr/local/hadoop/hadoop-0.20.204.0
    (5)bin/hadoop fs -mkdir /tmp
    (6)bin/hadoop fs -mkdir /user/hive/warehouse
    (7)bin/hadoop fs -chmod g+w /tmp
    (8)bin/hadoop fs -chmod g+w /user/hive/warehouse
    (9)vim /etc/profile
    #hive home
    export HIVE_HOME=/usr/local/hive
    export PATH=$PATH:$HIVE_HOME/bin
    (10)source /etc/profile
    (11)检查echo $HIVE_HOME 
    (12)修改core文件
    cd /usr/local/hadoop/hadoop-0.20.204.0/conf
    vim core-site.xml 
    <name>fs.default.name</name>
    <value>hdfs://master:9060</value>
    
    hive使用mysql保存metastore .
    Hive 将元数据存储在 RDBMS 中,有三种模式可以连接到数据库: 
    1)ingle User Mode: 此模式连接到一个 In-memory 的数据库 Derby,一般用于 Unit Test。 
    2)Multi User Mode:通过网络连接到一个数据库中,是最经常使用到的模式。 
    3)Remote Server Mode:用于非 Java 客户端访问元数据库,在服务器端启动一个 MetaStoreServer,客户端利用 Thrift 协议通过 MetaStoreServer 访问元数据库。 
    
    Hive默认是采用Derby来存储其Meta信息的, 
    现在我们需要修改为mysql 
    
    
    
    (13)安装mysql
    tar -zxf mysql-5.1.51-linux-i686-glibc23.tar.gz
    
    mv /mysql-5.1.51-linux-i686-glibc23 /usr/local/mysql
    
    cp /usr/loacal/mysql/support-files/my-large.cnf /etc/my.cnf
    
    groupadd mysql
    
    useradd mysql -g mysql
    
    chown -R root.mysql /usr/local/mysql
    
    cd /usr/local/mysql
    
    ./scripts/mysql_install_db --user=mysql
    
    
    
    vim /etc/my.cnf 找到log-bin=mysql-bin这一行,将其注释:
    #log-bin=mysql-bin
    #binlog_format=mixed
    在client下加入
    default-character-set=utf8
    在mysqld下加入
    default-character-set=utf8
    key_buffer_size = 256M
    max_allowed_packet = 64M
    
    cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
    
    启动mysql: service mysql start
    
    设置本地登录密码mysqladmin -u root password 123456
    
    
    进入数据库 /usr/local/mysql/bin/mysql -uroot -p
    远程登录权限设置grant all privileges on *.* to root@"%" identified by '123456' with grant option;
    grant all privileges on *.* to root@"master" identified by '123456' with grant option;
    create database hive
    
    (14)把一个jar包mysql-connector-java-5.1.15-bin.jar拷贝到hive的lib目录下
    
    
    连接数据库
    主要配置项如下:
    
    hive.metastore.warehouse.dir:(HDFS上的)数据目录 (即/user/hive/warehouse)
    hive.exec.scratchdir:(HDFS上的)临时文件目录 (即/tmp)
    连接数据库配置 
    默认meta数据库为derby ,为了避免使用默认的Derby数据库(有并发访问和性能的问题),通常还需要配置元数据库为MySQL,(mysql的安装过程这里就省了哈),修改hive-site.xml配置以下参数:
    
    javax.jdo.option.ConnectionURL:元数据连接字串 
    javax.jdo.option.ConnectionDriverName:DB连接引擎,MySQL为com.mysql.jdbc.Driver 
    javax.jdo.option.ConnectionUserName:DB连接用户名 
    javax.jdo.option.ConnectionPassword:DB连接密码 
    
    (1)cp hive-default.xml hive-site.xml
    示例
    
    <property>
    
    <name>javax.jdo.option.ConnectionURL</name>
    
    <value>jdbc:mysql://master:3306/hive?useUnicode=true&characterEncoding=UTF-8&createDatabaseIfNotExist=true</value>
    
    <description>JDBC connect string for a JDBC metastore</description>
    
    </property>
    
    ###############
    <property>
    
    <name>javax.jdo.option.ConnectionDriverName</name>
    
    <value>com.mysql.jdbc.Driver</value>
    
    <description>Driver class name for a JDBC metastore</description>
    
    </property>
    
    #############
    <property>
    
    <name>javax.jdo.option.ConnectionUserName</name>
    
    <value>root</value>
    
    <description>username to use against metastore database</description>
    
    </property>
    ###################
    <property>
    
    <name>javax.jdo.option.ConnectionPassword</name>
    
    <value>123456</value>
    
    <description>password to use against metastore database</description>
    
    </property>
    
    ***另外有一个需要注意的地方是
    需要把一个jar包mysql-connector-java-5.1.15-bin.jar拷贝到hive的lib目录下才行,否则执行语句的时候会报错,类似下面这样
    
    hive> show tables;
    FAILED: Error in metadata: javax.jdo.JDOFatalInternalException: Error creating transactional connection factory
    NestedThrowables:
    java.lang.reflect.InvocationTargetException
    FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask
    
    
    测试
    hive> CREATE TABLE tt(id int,name string)    
        > ROW FORMAT DELIMITED    
        > FIELDS TERMINATED BY ','       ########与后面load文件数据格式有关
        > STORED AS TEXTFILE;  
    
    #####可以指定将表创建到外部hdfs文件系统中。
    
    CREATE EXTERNAL TABLE foo(id INT) 
    
    STORED AS TEXTFILE LOCALTION '/user/foo/foo_data';
    
    
    hive> show tables;
    OK
    tt 
    ***************************在hive中查询插入的表
    
    进入mysql***************************************在mysql中查询刚插入的表tt
    /usr/local/mysql/bin/mysql -uroot -p
    mysql> use hive
    mysql> show tables;
    
    -----------------+
    | Tables_in_hive  |
    +-----------------+
    | BUCKETING_COLS  |
    | COLUMNS         |
    | DATABASE_PARAMS |
    | DBS             |
    | PARTITION_KEYS  |
    | SDS             |
    | SD_PARAMS       |
    | SEQUENCE_TABLE  |
    | SERDES          |
    | SERDE_PARAMS    |
    | SORT_COLS       |
    | TABLE_PARAMS    |
    | TBLS            |
    | federal_address |
    +-----------------+
    14 rows in set (0.02 sec)
    mysql> select * from TBLS;
    +--------+-------------+-------+------------------+-------+-----------+-------+----------+---------------+--------------------+--------------------+
    | TBL_ID | CREATE_TIME | DB_ID | LAST_ACCESS_TIME | OWNER | RETENTION | SD_ID | TBL_NAME | TBL_TYPE      | VIEW_EXPANDED_TEXT | VIEW_ORIGINAL_TEXT |
    +--------+-------------+-------+------------------+-------+-----------+-------+----------+---------------+--------------------+--------------------+
    |      1 |  1320808723 |     1 |                0 | root  |         0 |     1 | tt       | MANAGED_TABLE | NULL               | NULL               |
    +--------+-------------+-------+------------------+-------+-----------+-------+----------+---------------+--------------------+--------------------+
    1 row in set (0.00 sec)
    
    插入数据
    LOAD DATA [LOCAL] INPATH '/data/userdata' [OVERWRITE] INTO TABLE user;
    
    使用LOCAL选项将使用本地文件系统 ,否则将使用hdfs文件系统。使用OVERWRITE选项将删除原来table中的数据,否则将新数据添加到文件末尾。
    
    ########Load data导入数据将仅仅将文件拷贝到hive管理的目录下,并用table的元数据去解释这个文件。所以必须保证数据文件的结构必须和table的结构一致,
    否则可以load data成功但是数据解释不正确。特别注意fields分隔符和lines分隔符要和Table一致。id int,name string。。哈哈格式是
    1,'la'
    2,'yu'
    3,'ji'
    
    
    #########查询语句。 这里列出一些和标准SQL不同的地方。
    
    不能使用select count(*);需要指定count的列下标,select count(1) 。
    
    不能使用CREATE TABLE newtable SELECT * FROM user;必须事先Create table,再用INSERT向其中写入数据。
    
    排序关键字是SORT BY。
    
    LIMIT关键字只能跟一个数字,即从第一条记录开始选出若干条。
    
    INSERT语句变换很大,不能直接插入一条记录。插入的数据必须用SELECT子查询获取或者从某个文件导入
    
    
    附录:出现下列错误
    hive> show tables;
    FAILED: Error in metadata: javax.jdo.JDOFatalDataStoreException: Access denied for user 'root'@'master' (using password: YES)
    NestedThrowables:
    java.sql.SQLException: Access denied for user 'root'@'master' (using password: YES)
    可能是用户名密码错误
    进行下面操作查询用户密码
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | test               |
    +--------------------+
    mysql> use mysql
    mysql> select host,user,password from user;
    
    
    果然如此。然后进行赋权
    

      

  • 相关阅读:
    40 图 |我用 Mac M1 玩转 Spring Cloud
    # 20 图 |6000 字 |实战缓存(上篇)
    博客园,你肿么了?
    ES 终于可以搜到”悟空哥“了!
    48 张图 | 手摸手教你微服务的性能监控、压测和调优
    植树节,种个二叉树吧?
    紫霞仙子:区块链的十二连问
    太上老君的炼丹炉之分布式 Quorum NWR
    病毒入侵:全靠分布式
    为什么要“除夕”,原来是内存爆了
  • 原文地址:https://www.cnblogs.com/yuchunju/p/2530991.html
Copyright © 2020-2023  润新知