คำตอบขึ้นอยู่กับ ... ฉันเพิ่งติดตั้ง Hadoop 2.6 จาก tarball บน CentOS 64 บิต 64 การติดตั้ง Hadoop นั้นมาพร้อมกับไลบรารี่ 64 บิตที่สร้างไว้ล่วงหน้า สำหรับการติดตั้งของฉันมันอยู่ที่นี่:
/opt/hadoop/lib/native/libhadoop.so.1.0.0
และฉันรู้ว่ามันเป็น 64- บิต:
[hadoop@VMWHADTEST01 native]$ ldd libhadoop.so.1.0.0
./libhadoop.so.1.0.0: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by ./libhadoop.so.1.0.0)
linux-vdso.so.1 => (0x00007fff43510000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f9be553a000)
libc.so.6 => /lib64/libc.so.6 (0x00007f9be51a5000)
/lib64/ld-linux-x86-64.so.2 (0x00007f9be5966000)
แต่น่าเสียดายที่ฉันมองข้ามคำตอบอย่างโง่ ๆ ทันทีที่จ้องมองฉันในขณะที่ฉันกำลังมุ่งเน้นไปที่ "ห้องสมุดนี้ 32 บิต 64 บิตหรือไม่":
`GLIBC_2.14' not found (required by ./libhadoop.so.1.0.0)
บทเรียนได้เรียนรู้ อย่างไรก็ตามที่เหลือก็ทำให้ฉันสามารถที่จะระงับคำเตือนได้ ดังนั้นฉันจึงดำเนินการต่อและทำทุกอย่างที่แนะนำในคำตอบอื่น ๆ เพื่อให้เส้นทางไลบรารีโดยใช้ตัวแปรสภาพแวดล้อม HADOOP_OPTS ไม่มีประโยชน์ ดังนั้นฉันจึงดูซอร์สโค้ด โมดูลที่สร้างข้อผิดพลาดจะบอกคุณคำแนะนำ ( util.NativeCodeLoader ):
15/06/18 18:59:23 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
ดังนั้นออกไปที่นี่เพื่อดูว่าทำอะไร:
http://grepcode.com/file/repo1.maven.org/maven2/com.ning/metrics.action/0.2.6/org/apache/hadoop/util/NativeCodeLoader.java/
อ่ามีการบันทึกระดับดีบัก - ลองเปิดดูว่าเราได้รับความช่วยเหลือเพิ่มเติมไหม สิ่งนี้ทำได้โดยการเพิ่มบรรทัดต่อไปนี้ลงในไฟล์ $ HADOOP_CONF_DIR / log4j.properties:
log4j.logger.org.apache.hadoop.util.NativeCodeLoader=DEBUG
จากนั้นฉันก็รันคำสั่งที่สร้างคำเตือนดั้งเดิมเช่น stop-dfs.sh และได้รับสิ่งที่ดี:
15/06/18 19:05:19 DEBUG util.NativeCodeLoader: Failed to load native-hadoop with error: java.lang.UnsatisfiedLinkError: /opt/hadoop/lib/native/libhadoop.so.1.0.0: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /opt/hadoop/lib/native/libhadoop.so.1.0.0)
และคำตอบนั้นถูกเปิดเผยในตัวอย่างของข้อความดีบั๊กนี้ (เช่นเดียวกับที่คำสั่ง ldd ก่อนหน้านี้ 'พยายาม' เพื่อบอกฉัน:
`GLIBC_2.14' not found (required by opt/hadoop/lib/native/libhadoop.so.1.0.0)
ฉันมี GLIBC รุ่นใด นี่คือเคล็ดลับง่ายๆในการค้นหา:
[hadoop@VMWHADTEST01 hadoop]$ ldd --version
ldd (GNU libc) 2.12
ดังนั้นไม่สามารถอัปเดตระบบปฏิบัติการเป็น 2.14 ได้ ทางออกเดียวคือการสร้างไลบรารี่เนทีฟจากแหล่งต่าง ๆ บนระบบปฏิบัติการของฉันหรือระงับคำเตือนและไม่สนใจมันในตอนนี้ ฉันเลือกที่จะระงับการเตือนที่น่ารำคาญในตอนนี้ (แต่วางแผนที่จะสร้างจากแหล่งที่มาในอนาคต) ซื้อโดยใช้ตัวเลือกการบันทึกเดียวกันกับที่เราใช้เพื่อรับข้อความดีบั๊กยกเว้นตอนนี้เพียงแค่ทำให้ระดับข้อผิดพลาด
log4j.logger.org.apache.hadoop.util.NativeCodeLoader=ERROR
ฉันหวังว่าสิ่งนี้จะช่วยให้ผู้อื่นเห็นว่าประโยชน์ที่ยิ่งใหญ่ของซอฟต์แวร์โอเพนซอร์ซคือคุณสามารถเข้าใจสิ่งนี้ได้หากคุณทำตามขั้นตอนง่ายๆ