hive无法执行insert数据,建库建表正常

背景:hadoop-3.1.3  hive-3.1.2

我新搭建的4台虚拟机的hadoop+hive集群(一台master4GB内存,三台slave各2GB内存),今天执行Insert语句时候报错如图。

return code 2   -kill job_1744345307855等等  没有什么有用的信息

然后去查看更详细的日志,hive.log  hadoop-zy-namenode-master.log  hadoop-zy-resourcemanager-master.log 

在resourcemanager-master.log中看到一条有用的信息。

Invalid event: APP_UPDATE_SAVED at ACCEPTED

查到一篇资料,Hadoop集群什么时候会进入ACCEPTED状态,就是机器内存占满的时候,在yarn-site.xml中设置下内存参数。 

<property>

    <name>yarn.app.mapreduce.am.resource.mb</name>

    <value>256</value>

</property>

问题解决,执行成功!但是不知道为什么,hadoop-zy-resourcemanage-master.log中在执行insert时候还是会报错ACCPETED状态,这里还是会kill,但是却可以运行成功。  暂时不研究了,先做项目了。有笔友知道为何,可以私聊笔者探讨交流一下。(其实中间还把服务器的内存交换空间关闭了)

### Hive数据的语法与示例 #### 数据Hive 中,可以通过 `CREATE DATABASE` 或 `CREATE SCHEMA` 命令来创一个新的数据。命令的具体语法如下: ```sql CREATE DATABASE [IF NOT EXISTS] database_name [COMMENT 'database_comment'] [LOCATION 'directory_path'] [WITH DBPROPERTIES (property_name=property_value, ...)]; ``` - `[IF NOT EXISTS]`: 如果指定名称的数据不存在,则创数据。 - `[COMMENT 'database_comment']`: 可选字段,用于描述该数据的信息。 - `[LOCATION 'directory_path']`: 指定存储数据的位置路径,默认情况下会在 HDFS 的 `/user/hive/warehouse` 下创目录。 - `[WITH DBPROPERTIES (...)]`: 设置数据属性。 例如,下面是一个简单的例子[^3]: ```sql CREATE DATABASE IF NOT EXISTS my_database COMMENT 'This is a test database' LOCATION '/user/hive/my_database'; ``` 此命令将在 HDFS 上创名为 `my_database` 的数据,并附带注释说明以及自定义位置。 要切换到某个特定数据执行查询或其他操作,可使用 `USE` 子句: ```sql USE my_database; ``` 这使得后续所有的 SQL 查询都作用于当前选定的数据中。 #### Hive 支持多种类型的格结构,包括内部(Managed Table)、外部(External Table),还有临时(Temporary Table)等。 ##### 内部(Managed Table) 这是最常用的形式之一,在删除此类时其元数据和实际的数据都会被清除掉。基本语法为: ```sql CREATE TABLE [IF NOT EXISTS] table_name ( col1 data_type, col2 data_type, ... ) [COMMENT 'table_comment'] [PARTITIONED BY (col_name data_type)] [CLUSTERED BY (col_name) INTO num_buckets BUCKETS] [SORTED BY (col_name [ASC|DESC])] [ROW FORMAT DELIMITED FIELDS TERMINATED BY char LINES TERMINATED BY char] [STORED AS file_format]; ``` 举个实例演示如何构一张包含分区信息并采用 ORC 文件格式储存的新[^1]: ```sql CREATE TABLE employees( id INT, name STRING, salary FLOAT, join_date DATE ) COMMENT 'Employee details with partitioning on department.' PARTITIONED BY(department STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' STORED AS ORC; ``` 上述脚本立了一个员工记录,其中按部门划分了多个分区以便更高效地检索相关联的数据集。 ##### 外部(External Table) 当不想让 Hive 控制底层数据文件生命周期的时候可以选择这种方式。即使移除对应的 Hive 对象也不会影响原始数据源的存在状态。其声明方法几乎相同只是多了前缀关键词 EXTERNAL 而已。 ```sql CREATE EXTERNAL TABLE external_table_name ( column_definitions... ) [LOCATION hdfs_directory_path]; ``` 比如这样设置指向已有 HDFS 地址上的 CSV 文档作为输入资源: ```sql CREATE EXTERNAL TABLE logs_ext ( log_time TIMESTAMP, message STRING ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' WITH SERDEPROPERTIES ('field.delim'=',') LOCATION '/logs/csv/'; ``` 这里指定了 SerDe 类型处理逗号分割符的情况。 ##### 临时(Temporary Table) 这类特殊用途的只存在于发起它们的那个 session 生命周期期间结束之后就会消失不见再也无法访问到了。通常适用于那些只需要短期存在的中间计算成果或者测试验证场景之中。可通过附加 TEMPORARY 标识位实现快速搭过程[^2]. ```sql -- 方法一:通过列定义直接生成 CREATE TEMPORARY TABLE temp_employee ( emp_id INT, first_name STRING, last_name STRING ); -- 方法二:基于现有复制架构 CREATE TEMPORARY TABLE temp_copy LIKE permanent_table; -- 方法三:利用 SELECT INTO 构造初始内容填充 CREATE TEMPORARY TABLE temp_results AS SELECT * FROM source_data WHERE condition=true; ``` 以上三种途径均展示了不同风格下的临时构造技巧供开发者灵活选用满足各自需求特点。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值