本文主要包括:
- LLVM hit fatal error: Cannot select: intrinsic %llvm.x86.sse42.crc32.32.32
LLVM hit fatal error: Cannot select: intrinsic %llvm.x86.sse42.crc32.32.32
公司在客户集群部署CDH6.2.0完成后,使用impala时当执行group by,distinct
等类似shuffle操作的时候,会报以下错误:
F0222 15:24:10.852118 5234 llvm-codegen.cc:137] de46f4fb500c7078:bed226a500000006] LLVM hit fatal error: Cannot select: intrinsic %llvm.x86.sse42.crc32.32.32
*** Check failure stack trace: ***
@ 0x279b82c
@ 0x279d0d1
@ 0x279b206
@ 0x279e7cd
@ 0x11e2a5f
@ 0x26cdedf
@ 0x26ce07d
@ 0x1bd0ef1
@ 0x1bd5b89
@ 0x195bd3e
@ 0x1bcf999
@ 0x1bd2b13
@ 0x1bda2d2
@ 0x1bdc74f
@ 0x1960fe3
@ 0x1d822d8
@ 0x2646949
@ 0x26472f3
@ 0x22afea2
@ 0x22b06f9
@ 0x22acb9f
@ 0x11f1c69
@ 0xfab618
@ 0xfacd3c
@ 0xf985b6
@ 0x11a1e3f
@ 0x11a29e9
@ 0x1790be9
@ 0x7fd33df00ea4
@ 0x7fd33dc29b0c
Picked up JAVA_TOOL_OPTIONS: -Xms4294967296 -Xmx4294967296 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/impala_impala-IMPALAD-d02b8c673dfc84046520b4d81a5ac4a3_pid32418.hprof -XX:OnOutOfMemoryError=/opt/cloudera/cm-agent/service/common/killparent.sh
Wrote minidump to /var/log/impala-minidumps/impalad/c5d3214f-3cd1-41b7-4ece8b97-363712dd.dmp
通过在网上搜索资料,发现是impala的底层对CPU指令集有要求,客户当前服务器的CPU比较老,有很多指令集不支持
查看impala源码查找所需要的指令集:
得到需要的指令集,那么我们去对比当前服务器的指令集,看是否有指令集缺失:
grep -E "ssse3|sse4_2|avx2|sse4_1|avx|popcnt|pclmulqdq" /proc/cpuinfo
发现我们的服务器中缺少很多cpu指令集
又在Impala官网中找到安装impala的必要条件:
在CDH官网上也有相应的要求:
发现当前服务器CPU缺少avx2等指令集,导致失败。在官网上找到解决办法:
这个办法其实使用ChatGPT找到的,这玩意是真的牛逼
目前通过设置set disable_codegen = true;
暂时解决了这个问题,但是,设置了这个以后,在数据量大的情况下,Impala的执行效率会越来越低,根本解决办法是,替换更新一点的CPU
shell直接获取impala的执行结果
直接使用impyla包(类似impala-shell)
直接使用beeline或者beeline执行sql,返回结果都是含有|
等表样式,要想去除这种格式有2种方式:
- 使用impala-shell,并指定
-B --quiet
tenantidNum=`impala-shell -i ddp3:21000 -d tbb_athena -B --quiet -q "select count(distinct tenantid) from esp_project_schedule"` echo $tenantidNum
- 使用beeline方式,指定
--outputformat=csv2 --silent=true --showHeader=false
beeline --outputformat=csv2 --silent=true --showHeader=false -d "com.cloudera.impala.jdbc41.Driver" -u "jdbc:impala://ddp3:21050" -n tbb_athena -e "select count(distinct tenantid) from tbb_athena.esp_project_schedule;"
python连接impala
- 使用pip3 安装impala包:
报如下错误:pip3 install impyla
解决办法:copying bitarray/py.typed -> build/lib.linux-x86_64-3.6/bitarray copying bitarray/__init__.pyi -> build/lib.linux-x86_64-3.6/bitarray copying bitarray/util.pyi -> build/lib.linux-x86_64-3.6/bitarray running build_ext building 'bitarray._bitarray' extension creating build/temp.linux-x86_64-3.6 creating build/temp.linux-x86_64-3.6/bitarray gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -fPIC -I/usr/include/python3.6m -c bitarray/_bitarray.c -o build/temp.linux-x86_64-3.6/bitarray/_bitarray.o bitarray/_bitarray.c:12:20: fatal error: Python.h: No such file or directory #include "Python.h" ^ compilation terminated. error: command 'gcc' failed with exit status 1 ---------------------------------------- Command "/usr/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-f0tu2_83/bitarray/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-kh7xdpue-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-f0tu2_83/bitarray/
yum install python3-devel ## 再次执行安装操作 pip3 install impyla
使用jdbc方式连接impala
- 安装JayDeBeApi
pip3 install JayDeBeApi
- 准备必要的jar包
-rw-r----- 1 root root 61829 Jun 26 14:57 ImpalaJDBC41-2.6.3.jar
- 编写代码:
# -*- encoding: utf-8 -*- import jaydebeapi import sqlparse import time with open('esp_project_schedule_sql.sql', 'r') as file: sql_content = file.read() for sql in sql_content.split(";"): driver_path = ["/root/gujc/jars/ImpalaJDBC41-2.6.3.jar"] jdbc_url = "jdbc:impala://ddp2:21051/test;AuthMech=3;UID=root;PWD=;UseSasl=0" conn = jaydebeapi.connect("com.cloudera.impala.jdbc41.Driver", jdbc_url,[],driver_path) cursor = conn.cursor() print(sql) if 'insert overwrite' in sql: time.sleep(5) cursor.execute(sql + ";") cursor.close() conn.close()
Impala设置动态资源池不生效
通过CDH界面,配置Impala的动态资源池,但是执行sql并不会走原先设定的资源队列,而是走了root.user.xxx
通过调查,需要在CM上修改配置:
impala -> 配置 -> 用于资源管理的 YARN 服务: 修改为none
impala -> 配置 -> 用于 Llama HA 的 ZooKeeper 服务: 修改为none