DSE 4.7 中奇怪的 dse hive 集成
Weird dse hive integration in DSE 4.7
我正在尝试 运行 Hive 查询现有的 C* table。
这是我的 C* table 定义:
drop table IF EXISTS mydata.site_users;
CREATE TABLE IF NOT EXISTS appdata.site_users (
user_id text,
user_test_uuid uuid, --for testing purposes, if we can use it in queries, there could be some serde problems?
user_name text,
PRIMARY KEY (user_id)
);
这是我的外部配置单元 table 定义:
CREATE EXTERNAL TABLE c_site_users(
user_id string, user_test_uuid binary, user_name string)
STORED BY 'org.apache.hadoop.hive.cassandra.cql3.CqlStorageHandler'
WITH SERDEPROPERTIES( "cassandra.ks.name" = "mydata",
"cassandra.cf.name" = "site_users",
"cql3.partition.key" = "user_id",
"cassandra.cql3.type" = "text, uuid, text"
);
我已经使用 cqlsh 将数据插入到 C* table 中:
cqlsh:appdata> select * from site_users;
user_id | user_name | user_test_uuid
---------+-----------+--------------------------------------
user2 | Ivan | 51569760-10e6-11e5-af86-23fdaf275fb9
user1 | Sergey | 51542660-10e6-11e5-af86-23fdaf275fb9
user3 | Johan | 5157a8d0-10e6-11e5-af86-23fdaf275fb9
(3 rows)
现在我尝试 运行 使用 dse hive
相同的查询
vagrant@dsenode01:~$ dse hive
Logging initialized using configuration in file:/etc/dse/hive/hive-log4j.properties
hive> select * from c_site_users;
OK
Failed with exception java.io.IOException:java.io.IOException: com.datastax.driver.core.exceptions.UnavailableException: Not enough replica available for query at consistency LOCAL_ONE (1 required but only 0 alive)
Time taken: 13.297 seconds
太奇怪了!
C* table 没问题,数据在那里,我可以查询它,但是 dse hive 抱怨。我做错了什么?
好的,答案很简单。我需要在每个节点上启用 hadoop 运行 dse。我有 3 个节点,RF=1。并且只有一个节点启用了 HADOOP。我在所有 3 个节点上都启用了 HADOOP,它从两边工作:直接查询由 C* table 和 C* table 支持的外部 table 因为 DSE 使用 C* [=12 隐式更新 Metastore =]秒。
我正在尝试 运行 Hive 查询现有的 C* table。
这是我的 C* table 定义:
drop table IF EXISTS mydata.site_users;
CREATE TABLE IF NOT EXISTS appdata.site_users (
user_id text,
user_test_uuid uuid, --for testing purposes, if we can use it in queries, there could be some serde problems?
user_name text,
PRIMARY KEY (user_id)
);
这是我的外部配置单元 table 定义:
CREATE EXTERNAL TABLE c_site_users(
user_id string, user_test_uuid binary, user_name string)
STORED BY 'org.apache.hadoop.hive.cassandra.cql3.CqlStorageHandler'
WITH SERDEPROPERTIES( "cassandra.ks.name" = "mydata",
"cassandra.cf.name" = "site_users",
"cql3.partition.key" = "user_id",
"cassandra.cql3.type" = "text, uuid, text"
);
我已经使用 cqlsh 将数据插入到 C* table 中:
cqlsh:appdata> select * from site_users;
user_id | user_name | user_test_uuid
---------+-----------+--------------------------------------
user2 | Ivan | 51569760-10e6-11e5-af86-23fdaf275fb9
user1 | Sergey | 51542660-10e6-11e5-af86-23fdaf275fb9
user3 | Johan | 5157a8d0-10e6-11e5-af86-23fdaf275fb9
(3 rows)
现在我尝试 运行 使用 dse hive
相同的查询vagrant@dsenode01:~$ dse hive
Logging initialized using configuration in file:/etc/dse/hive/hive-log4j.properties
hive> select * from c_site_users;
OK
Failed with exception java.io.IOException:java.io.IOException: com.datastax.driver.core.exceptions.UnavailableException: Not enough replica available for query at consistency LOCAL_ONE (1 required but only 0 alive)
Time taken: 13.297 seconds
太奇怪了! C* table 没问题,数据在那里,我可以查询它,但是 dse hive 抱怨。我做错了什么?
好的,答案很简单。我需要在每个节点上启用 hadoop 运行 dse。我有 3 个节点,RF=1。并且只有一个节点启用了 HADOOP。我在所有 3 个节点上都启用了 HADOOP,它从两边工作:直接查询由 C* table 和 C* table 支持的外部 table 因为 DSE 使用 C* [=12 隐式更新 Metastore =]秒。